Memcached学习
一、概念
Memcached是一个开源的,高性能的内存缓存软件,从名称上看Mem就是内存,二cache是缓存。作用通过在事先规划好的内存空间中临时缓存数据库中的各类数据,以达到减少业务对数据库的直接高并发访问,从而达到提升数据库的访问性能,加速网站集群动态应用服务的能力。
应用场景:
1、作为数据库的前端缓存应用
a、完整缓存(易),静态缓存
b、热点缓存(难)
2、作业集群的session会话共享存储
二、Memcached服务分布式集群实现
1、程序端实现,程序加载所有mc的ip列表,通过对key做hash算法
2、负载均衡器,通过对key做hash,一致哈希算法的目的是不但保证每个对象只请求一个对应的服务器,而且当节点宕机,缓存服务器的更新重新分配比例降到最低
三、Memcached服务特点及工作原理
1、完全基于内存缓存的
2、节点之间相互独立
3、C/S模式机构、C语言编写
4、异步I/O模型,使用libevent作为事件通知机制
5、被缓存的数据以key/value键值对形式存在的
6、全部数据存放于内存中,无持久性存储的设计,重启服务器,内存里的数据会丢失
7、当内存中的缓存的数据容量达到启动时设定的内存值时,就自动使用LRU算法删除过期的缓存数据
8、可以对存储的数据设置过期时间,过期后的数据自动被清除,服务本身不会监控过期,而且在访问的时候查看key的时间戳,判断是否过期
9、Memcache会对设定的内存进行分开,再把块分组,然后再提供服务
四、Memcached内存管理机制原理
利用 Slab Allocation 机制来分配和管理内存。Slab Allocation 机制原理是按照预先规定的大小,将分配给 memcached 的内存分割成特定长度的内存块(chunk),再把尺寸相同的内存块,分成组(chunks slab class),这些内存块不会释放,可以重复利用。
五、Memcached工作
Memcached 的神奇来自两阶段哈希(two-stage hash)。Memcached 就像一个巨大的、存储了很多<key,value>对的哈希表。通过 key,可以存储或查询任意的数据。客户端可以把数据存储在多台memcached 上。当查询数据时,客户端首先参考节点列表计算出 key 的哈希值(阶段一哈希),进而中一个节点;客户端将请求发送给选中的节点,然后 memcached 节点通过一个内部的哈希算法(阶段二
哈希),查找真正的数据(item)。
六、Memcached最大优势
Memcached 最大的好处就是它带来了极佳的水平可扩展性,特别是在一个巨大的系统中。由于客户端自己做了一次哈希,那么我们很容易增加大量 memcached到集群中。memcached 之间没有相互通信,因此不会增加 memcached 的负载;没有多播协议,不会网络通信量爆炸(implode)。memcached 的集群很好用。内存不够了?增加几台 memcached 吧;CPU 不够用了?再增加几台吧;有多余的内存?在增加几台吧,不要浪费了。基于 memcached 的基本原则,可以相当轻松地构建出不同类型的缓存架构。
七、Memcached和服务器的local cache相比的优缺点
首先,local cache 有许多与上面(query cache)相同的问题。local cache 能够利用的内存容量受到(单台)服务器空闲内存空间的限制。不过,local cache 有一点比 memcached 和 query cache 都要好,那就是它不但可以存储任意的数据,而且没有网络存取的延迟。
local cache 的数据查询更快。考虑把 highly common 的数据放在 localcache 中吧。如果每个页面都需要加载一些数量较少的数据,考虑把它们放在local cached 吧。
local cache 缺少集体失效(groupinvalidation)的特性。在 memcached 集群中,删除或更新一个 key 会让所有的观察者觉察到。但是在local cache中, 我们只能通知所有的服务器刷新cache(很慢,不具扩展性),或者仅仅依赖缓存超时失效机制。
八、Memcached的cache机制
Memcached 主要的 cache 机制是 LRU(最近最少用)算法+超时失效。当您存数据到 memcached 中,可以指定该数据在缓存中可以呆多久 Which is forever,or some time in the future。如果 memcached 的内存不够用了,过期的 slabs会优先被替换,接着就轮到最老的未被使用的 slabs。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!