对PHP语言来说,PHP使用memcache有两个模块,分别叫memcache和memcached,他们的区别看下表:

参考:http://hi.baidu.com/tony_wd/item/605e959241f87c8c59146164

 

对其他场景来说:

Memcache是这个缓存项目(http://memcached.org/)的名称,而memcached是它服务器端的主程序文件名 。

 

memcached作者Brad Fitzpatrick(布莱德·菲兹派翠克)用Go开发了前者的替代版:groupcache(https://github.com/golang/groupcache)。

groupcache与memcached的相似之处:

通过key分片,并且通过key来查询响应的peer。

groupcache与memcached的不同之处:

1. 不需要对服务器进行单独的设置,这将大幅度减少部署和配置的工作量。groupcache既是客户端库也是服务器库,并连接到自己的peer上。

2. 具有缓存过滤机制。众所周知,在memcached出现“Sorry,cache miss(缓存丢失)”时,经常会因为不受控制用户数量的请求而导致数据库(或者其它组件)产生“惊群效应(thundering herd)”;groupcache会协调缓存填充,只会将重复调用中的一个放于缓存,而处理结果将发送给所有相同的调用者。

3. 不支持多个版本的值。如果“foo”键对应的值是“bar”,那么键“foo”的值永远都是“bar”。这里既没有缓存的有效期,也没有明确的缓存回收机制,因此同样也没有CAS或者Increment/Decrement。

4. 基于上一点的改变,groupcache就具备了自动备份“超热”项进行多重处理,这就避免了memcached中对某些键值过量访问而造成所在机器CPU或者NIC过载。

5. 当下只支持Go

除了一些优化,最大的区别其实是memcache有缓存过期策略,groupcache没有缓存有效期和过期策略。groupcache放弃了更改和删除的能力,带来了新的能力:集群的能力,处理热点的能力。(对比老版本memcached,groupcache去掉了缓存有效期及缓存回收机制,随之而来的是通过自动备份来均衡负载。)

之前memcache服务器之间是没有交集的,在groupcache则是集群起来的。

另外,以前memcache会因为同时存取同一个key而造成single CPU overloading的问题,在groupcache中则通过auto-mirror机制解决了。

http://www.tuicool.com/articles/mmiuQb

http://www.csdn.net/article/2013-07-30/2816399-groupcache-readme-go

http://blog.csdn.net/heiyeshuwu/article/details/14225343

运行机制

简而言之,groupcache查找一个Get(“foo”)的过程类似下面的情景:

  • key“foo”的值是否会因为“过热”而储存在本地内存,如果是,就直接使用;
  • key“foo”的值是否会因为peer #5是其拥有者而储存在本地内存,如果是,就直接使用;
  • 首先确定key “fool”是否归属自己N个机器集合的peer中,如果是,就直接加载。如果有其它的调用者介入(通过相同的进程或者是peer的RPC请求,这些请求将会被阻塞,而处理结束后,他们将直接获得相同的结果)。如果不是,将key的所有者RPC到相应的peer。如果RPC失败,那么直接在本地加载(仍然通过备份来应对负载)。

最新文章

  1. 用SignalR 2.0开发客服系统[系列1:实现群发通讯]
  2. Quartz应用实践入门案例二(基于java工程)
  3. SpringMVC @RequestBody问题:Unrecognized field , not marked as ignorable
  4. MYSQL建表语法(主键,外键,联合主键)
  5. ubuntu 调整桌面图标大小
  6. fgetc和fputc函数
  7. [moka同学收藏]Yii2.0 rules验证规则
  8. Java锁之自旋锁详解
  9. ecshop后台增加模块菜单详细教程(图)
  10. hdu 4739 Zhuge Liang's Mines
  11. RTMP/RTP/RTSP/RTCP的区别
  12. HDU 1175 连连看(BFS)
  13. hdu 2546 饭卡(DP)
  14. ExtJS001HelloWorld弹窗
  15. Android应用中Back键的监听及处理
  16. C#生成PDF页脚第几页共几页
  17. 为什么PHP(CLI)同一个错误信息会打印两次?
  18. 将树形递归转换为loop
  19. Spark学习笔记
  20. 作业:K-means算法应用:图片压缩

热门文章

  1. ES6入门之set和map
  2. Linux音频编程指南
  3. ubuntu添加环境变量【原创】
  4. dojo 九 effects dojo/_base/fx 和 dojo/fx
  5. 加密工具类 - CryptoUtils.java
  6. 如何设置 Windows 开机启动项
  7. Setup Entity Framework Environment
  8. hibernate学习笔记4---HQL、通用方法的抽取实现
  9. from 表单提交
  10. 警惕rapidxml的陷阱:添加节点时,请保证变量的生命周期