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

Memcached

2015-08-21 20:11 405 查看
Memcached是一个免费开源的,高性能的,具有分布式对象的缓存系统,它可以用来保存一些经常存取的对象或数据,保存的数据像一张巨大的hash表,该表以Key-value对的方式存在内存中。它实现了客户端的分布式缓存,但没有实现服务端的分布式。

所谓分布式,就是将不同的键值保存到不同的服务器上,这样就实现了memcached的分布式。Memcached服务器增多以后,键就会分散,即使一台memcached服务器挂掉,也影响不大。

1 操作流程

检查客户端的请求数据是否在memcached中,如有,直接把请求数据返回,不再对数据库进行任何操作。

如果请求的数据不在memcached中,就去查数据库,把从数据库中获取的数据返回给客户端,同时把数据缓存一份到memcached中(memcached客户端不负责,需要程序明确实现)

每次更新数据库的同时更新memcached中的数据,保证一致性。

当分配给memcached内存空间用完之后,会使用LRU(Least Recently Used,最近最少使用)策略加上到期失效策略,失效数据首先被替换,然后再替换掉最近未使用的数据。

2 内存管理机制

目前的memcached采用的是Slab Allocation机制:整理内存以便重复使用。在这之前,内存管理基于malloc和free来进行的。但是这种方式会产生内存碎片,加重操作系统的负担,在最坏的情况下,可能操作系统比memcached系统还要慢。

SlabAllocation机制的思想就是把内存按照一定的大小划分为块,然后对相同大小的块进行分组。在申请内存的时候,根据大小查找适合的位置将其放进去。然而其实这种方式也有缺点,例如在112字节的一块内存区域放置一个100个字节的数据,那么就有12个字节的内存空间被浪费掉。





3 Memcached的缓存策略:

Memcached的缓存策略是LRU(最近最少使用)加上到期失效策略。当你在memcached内存储数据项时,你有可能会指定它在缓存的失效时间,默认为永久。当memcached服务器用完分配的内时,失效的数据被首先替换,然后也是最近未使用的数据。在LRU中,memcached使用的是一种 Lazy Expiration策略,自己不会监控存入的key/vlue对是否过期,而是在获取key值时查看记录的时间戳,检查key/value对空间是否过期,这样可减轻服务器的负载。

4 Memcached的分布式算法:

所谓分布式算法就是确定保存的时候对象应该放在哪个服务器上,通过key取值的时候,应该去哪个服务器寻找数据。这一进一出的两个过程,只要保证相同的位置计算算法就可以。







4.1余数算法:

先求得键的整数散列值,再除以服务器台数,根据余数确定存取服务器,这种方法计算简单,高效,但在memcached服务器增加或减少时,几乎所有的缓存都会失效。

4.2 散列算法(一致性hash算法)

先算出memcached服务器的散列值,并将其分布到0到2的32次方的圆上,然后用同样的方法算出存储数据的键的散列值并映射至圆上,最后从数据映射 到的位置开始顺时针查找,将数据保存到查找到的第一个服务器上,如果超过2的32次方,依然找不到服务器,就将数据保存到第一台memcached服务器 上。如果添加了一台memcached服务器,只在圆上增加服务器的逆时针方向的第一台服务器上的键会受到影响。



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