Memcached

简介Memcachedredis

Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它经过在内存中缓存数据和对象来减小读取数据库的次数,从而提升动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,可是客户端能够用任何语言来编写,并经过memcached协议与守护进程通讯。算法

 

memcached是高性能的分布式内存缓存服务器。它经过缓存数据库查询结果,减小数据库访问次数,以提升动态Web应用的速度、提升可扩展性。数据库

Memcached的分布式算法缓存

A.余数哈希:根据服务器台数的余数进行哈希,求得键的哈希值,再处理服务器台数,根据余数选择服务器,服务器

缺点:当添加或者移除服务器时,缓存重组的代价太大,网络

当添加服务器,要进行重哈希,会致使原来的服务器序号变了,下一次找不到,访问数据,Memcached命中率降低,那么就增长了数据库服务器的负载.数据结构

  1. 一致性哈希:一致性哈希是将整个哈希值空间组织成一个虚拟的圆环,如假设某哈希函数H的值空间是0~(2^32 -1)(即哈希值是一个32位的无符号整型),这个哈希空间为环。而后让每台机器占一个扇形空间。

Memcached的数据清除算法多线程

LRU。每一个slab会维护一个队列,刚插入的数据在队头,常常get的数据也会移动到队头,这样较老或者访问较少的数据相对都留在队尾。该算法从队尾开始淘汰。当slab分配不到足够的内存时,首先会检查队尾是否有过时数据。若是有的话会直接将其覆盖为新的对象,若是没有,会开始淘汰队尾的对象。分布式

 

Slab是一个内存块,它是memcached一次申请内存的最小单位。Slab的大小固定为1M(1048576 Byte),一个slab由若干个大小相等的chunk组成。每一个chunk中都保存了一个item结构体、一对key和value。memcached

描述一下Memcacehd的工做流程

先检查客户端的请求数据是否在memcached中,若有,直接把请求数据返回,再也不对数据库进行任何操做;若是请求的数据不在memcached中,就去查数据库,把从数据库中获取的数据返回给客户端,同时把数据缓存一份到memcached中(memcached客户端不负责,须要程序明确实现);每次更新数据库的同时更新memcached中的数据,保证一致性;当分配给memcached内存空间用完以后,会使用LRU(Least Recently Used,最近最少使用)策略加上到期失效策略,失效数据首先被替换,而后再替换掉最近未使用的数据。

Memcached 和 Redis的区别

1 、Redis不单单支持简单的k/v类型的数据,同时还提供string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)等数据结构的存储。memcache支持简单的k/v数据类型。

2 、Redis支持数据的备份,即master-slave模式的数据备份。

3 、Redis支持数据的持久化,能够将内存中的数据保持在磁盘中,重启的时候能够再次加载进行使用,而Memecache把数据所有存在内存之中

四、 redis的速度比memcached快不少

五、Memcached是多线程,非阻塞IO复用的网络模型;Redis使用单线程的IO复用模型。

 

小结:,有持久化需求或者对数据结构和处理有高级要求的应用,选择redis,其余简单的key/value存储,选择memcached。对于二者的选择须要要看具体的应用场景,若是须要缓存的数据只是key-value这样简单的结构时,则仍是采用memcache,它也足够的稳定可靠。若是涉及到存储,排序等一系列复杂的操做时,毫无疑问选择redis。

相关文章
相关标签/搜索