您的位置:首页 > 数据库 > Memcache

分布式缓存Memcache

2015-06-14 18:23 543 查看
Memcached是分布式的,也就是说它不是本地的。它基于网络连接(当然它也可以使用localhost)方式完成服务,本身它是一个独立于应用的程序或守护进程(Daemon方式)。

Memcached使用libevent库实现网络连接服务。libevent是个程序库,它将Linux的epoll、BSD类操作系统的kqueue等事件处理功能封装成统一的接口。即使对服务器的连接数增加,也能发挥O(1)的性能。

Memcached是“分布式”的内存对象缓存系统,那些不需要“分布”的,不需要共享的,或者干脆规模小到只有一台服务器的应用,memcached不会带来任何好处,相反还会拖慢系统效率,因为网络连接同样需要资源。它的实际瓶颈在于网络连接。

memcached使用内存管理数据,所以它是易失的,当服务器重启,或者memcached进程中止,数据便会丢失,所以memcached不能用来持久保存数据。并且内容容量达到指定值之后,就基于LRU(Least Recently Used)算法自动删除不使用的缓存。

memcached尽管是“分布式”缓存服务器,但服务器端并没有分布式功能。各个memcached不会互相通信以共享信息。完全取决于客户端的实现来进行分布式。

Memcache的分布式算法:

根据余数计算分散

过程:先根据CRC32求哈希值,再根据server数量求余。

缺点:当添加或移除服务器时,缓存重组的代价相当巨大。

Consistent Hashing

过程: 首先求出memcached服务器(节点)的哈希值, 并将其配置到0~232的圆(continuum)上。 然后用同样的方法求出存储数据的键的哈希值,并映射到圆上。 然后从数据映射到的位置开始顺时针查找,将数据保存到找到的第一个服务器上。 如果超过232仍然找不到服务器,就会保存到第一台memcached服务器上。

虚拟节点

平衡性是指哈希的结果能够尽可能分布到所有的缓冲中去,这样可以使得所有的缓冲空间都得到利用。

虚拟节点( virtual node )是实际节点在 hash 空间的复制品( replica ),一个实际节点对应了若干个“虚拟节点”,这个对应个数也成为“复制个数”,“虚拟节点”在 hash 空间中以 hash 值排列。

        

  http://www.ha97.com/4575.html Memcached原理深度分析详解

  http://blog.csdn.net/dato/article/details/1968663 Memcache 内存管理

  http://kb.cnblogs.com/page/42732/ 理解Memcache的内存存储

  http://kb.cnblogs.com/page/42734/ Memcache的分布式算法

  /article/1682474.html 一致性hash算法

     
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: