高性能的key/value数据缓存,key是url 哈希过的结果,value是key所对应的数据。
软件系统:
结构化数据:RDBMS
半结构化数据:JSON(Documentation)-----> NoSQL
非结构化数据:文件系统(分布式文件系统存储)
如果数据变化频率不大。可以使用memcached。多用于缓存mysql的查询结果。
memcache于其他的缓存不同的地方在于:memcache可以支持数据的修改。
默认同时监听tcp和udp的11211端口。
memcached的特点:
协议简单
基于libevent事件处理
基于内存完成数据存储:LRU
memcached互不通信的集群:分布式
memcache是基于惰性缓存管理的,简单来说就是缓存到期里不会被清理出去,仅仅是将其标记为不可以,当要用到这块内存时将其覆盖掉即可。
memcache属于旁挂式缓存,只是存储,其他都不管
varnish属于代理式缓存,自己本地没有数据,则varnish主机会自行去后端主机取数据
安装memcache
在centos的base源中有memcached包,直接yum安装即可
开启服务后,可以看到memcache在udp和tcp的11211端口都监听了
使用telnet连到memcached上面
stats用来显示当前的统计状态数据
设定一个缓存 key名为mykey ,标识符为0 ,缓存时长为60s,大小为11个字符
使用get查看缓存
使用append往value后面追加值 ,1表示符加的字符长度为1
使用prepend往value前面附加值
使用delete删除一个缓存
使用incr 增加缓存值 ,decr减少缓存的值
flush_all表示清理所有缓存。
如果php想连向memcache,需要安装php的一些扩展模块
php extensions:memcache ,memcached
内存存储:
slab allocation:整理内存以进行复用,slab allocation
page:分配给slab的用于再次分割成chunk地内存空间
chunk:用于缓存缓存对象地空间
slab class:特定大小的chunk组成的组
我们停掉memcached服务,然后查看chunk大小
memcached的 -f 选项就是用来指定增长因子(factor),默认为1.25
使用-f 指定factor大小
如果想永久有效,在option项加上要指定的内容即可
memcached-too查看stats:
#:slab class的编号
Item_Size:chunk大小
Max_age:缓存对象的生存时间
Pages:分配给slab的内存页数
count:slab内的记录数
Full?:slab内是否仍有空闲的chunk
清理缓存:
(1)根据缓存对象的ttl进行清理;
(2)根据LRU算法进行清理。
生产环境中根据自己的需求定义清理方法,因为最近最少访问的东西以后也可能会被访问到。
memcached的分布式机制
互不通信的分布式集群:
取模法和以一致性hash计算。
lnmmt:nginx memcached musql tomcat
tomcat容器将自己的会话保存在memcached服务器中
当有两个tomcat服务器,让其使用两个memcached节点,任何一个tomcat节点需要保持会话会先保存在一个memcached节点,然后备份一份到另一个memcached节点上