Memcached简介

一、什么是Memcached

        Memcached是高性能的分布式内存缓存服务器。它通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用速度,提高扩展性。Memcached的API使用32位元的循环冗杂校验计算键值后,将资料分散在不同机器上。当表格慢了以后,接下来新增的资料会以LRU机制替换掉。Memcached基于一个存储键值对的hashmap,其守护线程是用C语言写的,但是客户端可以用任何语言来编写,并通过Memcached协议与守护线程通信

二、Memcached的分布式算法

A:余数哈希:根据服务器的台数的余数进行哈希,求得键的哈希值后,在处理服务器台数,根据余数选择服务器
    缺点:当添加或者移除服务器时,缓存重组的代建太大,当添加服务器,要进行重哈希,会导致原来的服务器序号变了,下一次找不到,访问数据,Memcached命中率下降,那么就增加了数据库服务器的负载
B:一致性哈希:一致性哈希是将整个哈希值空间组织成一个虚拟的圆环,如假设某哈希函数H的值空间是0——(2^32-1),这个哈希空间为环,然后让每台机器占一个扇形空间。
        个人理解:
        余数哈希相当于一个萝卜一个坑,刚刚好,这时候在中间新挖一个坑,下一次去拿的时候会按照原有逻辑,会导致最后一个应该有萝卜的坑没被拿到萝卜而丢了;一致性哈希就是这每100米挖一个坑填一个萝卜,是根据萝卜去挖坑,坑不会挖多,所以萝卜也不会丢失,萝卜就是数据,坑就是存放数据的容器

三、Memcached的数据清除算法

        采用了LRU机制(最近最少使用,一种页面置换算法),每个slab会维护一个队列,刚插入的数据在队头,经  常get的数据也会移动到队头,这样较老或者访问较少的数据相对都留在队尾。该算法从队尾开始淘汰。当slab分配不到足够的内存时,首先会去检查队尾是否有过期数据。如果有的话直接将其覆盖为新的对象,如果没有,会开始淘汰队尾的对象
        Slab是一个内存块,它是Memcached一次申请内存的最小单位,Slab的大小固定为1M,一个Slab由若干个大小相等的chunk组成,每个chunk中都保存了一个item结构体,一对key和value

0cbdffb6908e90172735badd578c35c8486.jpg

三、Memcached的工作流程

        先检查客户端的请求数据是否在Memcached中,如果有,直接把请求数据返回,不再对数据库进行任何操作;如果请求的数据不在Memcached中,就去查数据库,把数据库中所回去的饿数据返回给客户端,同时把数据缓存一份到Memcached中;每次更新数据库的同时更新Memcachd中的的数据,保证一致性,当分配给Memcached内存空间用完后,会使用LRU策略,加上到期失效策略,失效的数据首先会被替换掉,然后在替换最近未使用的数据

四、Memcached与Redis的区别

  1. Redis不仅仅支持简单的k/v类型的数据,同时还提供了String(字符串)、list(链表)、set(集合)、zset(有序集合)hash等数据结构的存储;而Memcached只处理简单的数据类型String
  2. Redis支持数据的备份,即master-slave模式的数据备份
  3. redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候还可以加载进行使用;而Memcached是把数据全部存储到内存之中
  4.  redis的速度比Memcached快很多
  5. Memcached是多线程,非阻塞IO复用网络模型;Redis使用单线程的IO复用模型;(阻塞:暂停一个线程的执行以等待某个条件的发生,例如:资源就绪)

        总结:

        有持久化需求或者对数据结构和处理有高级要求的应用,选择redis,其他简单的key/value存储,选择Memcached,对于两者的选择需要看看具体的应用场景,如果需要缓存的数据只是key-value这样简单的结构时,则还是才用Memcached,它也足够的稳定可靠,如果涉及到存储、排序等一系列复杂的操作时,毫无疑问选择redis

转载于:https://my.oschina.net/u/4169647/blog/3081669

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值