Memcached的实现原理

Memcahced 是什么?

Memcached是一种高性能分布式的内存缓存服务器。通过将数据库的查询结果存放在内存中,从而减少对数据的访问,以提高动态Web的速度和可扩展性。Memcached的API使用循环冗余校验(CRC-32)算法计算键值后,将数据存储在不同的机器。当分配的空间耗尽以后,数据的更通过LRU(Least Recently Use)算法更新不常用和失效的数据。它的守护进程是利用C语言编写的,但是客户端可以用任何语言编写,并通过Memcached协议与守护进程通信。

Memcahched中涉及的算法

Memcahched常用的算法有两种:

  • 余数哈希算法:求出key的hash值,然后除以余下服务器的数目。将取得的余数作为数据存储的服务器的编号,并将数据存入该服务器中。
    优点:计算简单。
    缺点:增加节点的时候,以前的数据难以命中。
  • 一致性哈希算法:先构造一个232的整数环,将一个1M的空间分成区间[0,2^32-1]。将hash(key)的值存入hash环的对应位置。存入的hash值根据顺时针找到最近的节点。
    优点:增加节点后,环中受影响的数据只有逆时针的第一个节点。
    缺点:当所有服务器的负载能力一样的时候,节点负载能力会不均衡。

Memcahched中的数据清除

Memcached通过内存块中Slab管理每个队列。新加入的数据添加在队头,经常使用的数据也会移动队头。对于不使用的数据则会移动到队尾。当队列已经被填充满,则会检查队列中数据是否有效,无效则被替换。当数据有效,则会剔除队尾数据即最不常用的数据。

Memcahced的工作流程

用户发出查询请求,如果数据在内存中,则返回数据结果,不调用数据库。如果数据不再内存中,服务器会调用数据库查找结果,并将结果存入Memcached中(需要用代码实现)。Memcached中存储的数据会与数据库中保持一致。当Memcached的队列已满,它会使用LRU进行数据清除。失效数据首先被替换,然后清除最不常使用的数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值