menmcache

【1】memcache软件客户端软件安装的是memcache 服务端软件安装的是memcached

【2】memcached的作用:在传统场景中  多数的web服务器都会将数据保存到

关系型数据库中,但随着数据量增大,访问的集中,关系型数据库的负担加重

响应缓慢,导致网站打开延迟等问题 memcache的主要目的就是作为数据库的

缓存,通过在自身内存中缓存关系型数据库的调查结果,减少数据库自身被访问的次数

,以提高动态web应用的速度,提高网站架构的并发能力和可扩展性

【3】memcache服务的运行原理是通过在事先规划好的系统内存空间中临时缓存数据库

中的各类数据,以达到减少前端业务服务队数据库的直接高并发访问

从而达到提升大规模网站集群中动态服务的并发访问的能力。生茶场景中

memcache服务一般被用来保存网站中经常被读取的对象或数据,就像我们的客户端浏览器

也会把经常访问的网页缓存起来一样,通过内存缓存读取对象或数据要比磁盘

读取快很多。

【4】互联网常见的内存缓存服务软件

  memcache                    纯内存             常见于缓存网站后端的各类数据,主要缓存用户重复请求的动态内容

  redis                       持久化存储         缓存用户重复请求的动态内容,作为数据库的有效补充 

 memcachedb                   持久化存储         缓存用户重复请求的动态内容,作为数据库的有效补充 

squid nginx                   内存或者内存加磁盘缓存    主要用于缓存web前端的服务内容


【5】常见用途和工作流程

他是一种内存缓存软件,在工作当中经常用来缓存数据库的查询数据,数据被缓存

在事先预分配的memcache管理的内存中,可以通过api或者命令的的方式存取内存中缓存的这些数据,memcache服务内存中缓存

的数据就像一张巨大的hash表,每条数据都是以key-value对的形式存在

【6】网站读取memcache数据时的工作流程:

memcache 用来缓存查询到的数据库中的数据,逻辑上当程序员访问后端的数据库获取数据时会有限访问

memcache缓存,如果缓存中有数据没有命中,程序在去读取后端的数据库读取数据,读取需要的数据后,

把数据返回客户端,同时还会把读取到的数据缓存到memcache内存中,这样客户端用户在请求相同的额数据就会直接读取memcache缓存的数据,这样

减轻了后端数据库的压力

【7】memcache在企业中的应用场景:

1完整数据缓存

不会经常变动的数据,事先放到memcache里,然后对外提供数据访问,这个过程

被称之为“数据预热”用户读取数据的时候只需读取缓存里面的书库,减少了数据库的压力

2数据做成静态化文件,然后通过在前端的web缓存或者

使用cdn加速效果更好

3 热点数据缓存


用户更新数据后网站程序一般先把数据写入数据库一份,同时再把这部分数据放入

memcache ,下一次访问的时候就直接从memcache中访问数据了,这种方法用来缓存

网站热点的数据,

4 作为集群节点sesson会话共享存储

即把客户端用户请求多个前端应用服务集群产生的session会话信息

统一存储到一个memcache缓存中

由于session会话数据是存储在内存中的,所以很快

会话保持一般在后端不在前端保持会话,会话在前端的话,

会造成负载均衡不太均衡,数据会抛到同一个机器


【8】memcache作为高并发 高性能的缓存服务

1 协议简单

memcache的协议实现简单,采用基于文本行的协议,能通过teleneet

nc等命令直接操作memcache服务存取数据

2 支持epoll、kqueue异步io模型,使用libevent作为时间处理通知机制

3key/value 键值数据类型

被缓存的数据以key/value键值形式存在

oldboy---36  key=oldboy,value=36

oldgirl--28  key=oldgirl  value=28

通过oldboy key 可以获取到36值,同理通过oldgirlkey可以获取28值3

3 全内存缓存 效率高

mem管理内存的方式非常高效,全部的数据都存放于mem服务事先

配好的内存中,无持久化存储的设计,和系统物理内存一样重启后数据消失

当内存中缓存的数据容量达到服务启动时这顶的内存值时,就自动使用LRU算法删除过期的缓存数据

也可以在存放数据时对存储的数据设置过期时间,而是在访问的时候查看key的时间戳判断是否过期

如果希望重启后数据依然能保留,那么就可以采用redis这样持久性内存缓存系统

4 可支持分布式集群

分布式mem集群的不同服务器之间是互不通信的,每一个节点都是独立存储数据,并且数据之间的内容也是不一样的,

mem服务器本省不会监控数据的过期,但是每条数据插入的时候会设置过期时间

1 利用web点程序实现mem分布式的简单代码

【10】memcache安装过程:

yum install libevent libenent-devel nc telnet -y安装依赖

rpm -qa libevent libevent-devel nc telnet   检查依赖

yum install -y memcached                  安装memcache 

【11】

1查看memcache的路径

which memcached

2 查看memcache的相关参数:

memcached -h

3启动memcached:

 mremcached -m 16m -p 11211 -d -u root -c 8000

-m:使用多大内存 默认是64m  -p:指定端口参数 默认11211  -d:后台运行  -u 指定用户  -c 最大并发链接数

 ps -ef |grep mem  查看一下启动没有:

root        659      2  0 20:50 ?        00:00:00 [vmmemctl]

root       1295      1  0 21:14 ?        00:00:00 memcached -m 16m -p 11211 -d -u root -c 8000

root       1317   1200  0 21:27 pts/0    00:00:00 grep mem

[root@root ~]# 

4 mem也有多实例 只要改变一下端口就ok

 mremcached -m 16m -p 11212 -d -u root -c 8000


【12】mem先关参数

-d 守护进程运行服务

-u 指定mem的用户

-p 指定mem服务监听tcp端口号

-m指定服务缓存数据的端口号

-P 设置保存mem的pid文件

-M 内存不够时 报错

-L 启动大内存页,可以降低内存浪费 改进性能

-c 最大的并发链接数 默认是1024

-t 线程数 默认是4

【13】mem的语句结构:

mysql的insert语句       memcache的set命令

mysql的select语句       memcache的get命令

MySQL的delete语句       memcache的delete命令

memcache相关命令详细说明:


set 无论如何都进行写入数据,会覆盖老数据

add 只有对应数据不存在时才添加数据

repalce 只有数据存在时进行替换数据

append 往后追加

prepend 往前追加

cas 按版本号更改


key  普通字符串 小于250个字符

flags 客户端用来标识数据格式的数值

exptime  存活时间  0为永远

bytes 字节数



telnet 127.0.0.1 11211  telnet 连接

例子:【1】

1

set user01 0 0 7

oldgirl

STORED

get user01

VALUE user01 0 7

oldgirl

END


2

set user02 0 0 6

oldboy

STORED

get user02

VALUE user02 0 6

oldboy

END



3 最后的数字7 必须和要插入数据的字节相同要不就不成功

set user03 0 0 7

oldboy




【2】删除数据删除key键

delete user02

DELETED

get user02

END


【3】退出  删除错误的输入 ctrl+u

quit



nc命令测试:

printf "set key1 0 0 3\r\old\r\n"|nc 127.0.0.1 11211  插入数据

printf "get key1\r\n"|nc 127.0.0.1 11211              查看数据

printf "delete key1\r\n"|nc 127.0.0.1 11211           删除数据

printf "get key1\r\n"|nc 127.0.0.1 11211              查看数据

未完待续