官方地址:
http://memcached.org/
【简介】
为什么会有Memcache和memcached两种名称?
其实Memcache是这个项目的名称,而memcached是它服务器端的主程序文件名。
Memcache官方网站:http://www.danga.com/memcached,http://memcached.org/
针对WEB2.0,出现了以下的特点:
[img]http://dl2.iteye.com/upload/attachment/0090/9540/b775f653-3881-38f2-b745-87a5b97f6b4f.png[/img]
许多Web应用都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示。但随着数据量的增大、访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、网站显示延迟等重大影响。
这时就该memcached大显身手了。memcached是高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。
[img]http://dl2.iteye.com/upload/attachment/0089/3986/26fc2e13-e314-33f3-b150-7116712afa01.jpg[/img]
memcached作为高速运行的分布式缓存服务器,具有以下的特点。
• 协议简单
• 基于libevent的事件处理
• 内置内存存储方式
• memcached不互相通信的分布式
【个人心得】
集中分布式技术(不是很流行)
magent,moxi
现在一般都是用客户端的一致性hash解决分布式集群问题
【过期淘汰】
[list]
[*]Lazy Expiration:即使设置超时,也不会主动回收内存,只有当get时再主动查看记录是否过期,即能解释为何Memcached吃内存只进不出
[*]Last Recently Used:当内存空间不足分配时,扫描最后几条条记录,通过LRU方式淘汰掉。可通过-M参数禁用----就是在一个时间窗口内,寻找调用次数最少的淘汰掉,而不是总时间里,调用次数最少的。
[/list]
陷阱
陷阱1:每一个slab有一个自己的LRU链表,且slab间不共享链表。
陷阱2:未过期的数据可能比已过期的数据先被抹掉。
【进程模型】
典型的多线程,由一个监听主线程和多个worker子线程组成,主线程监听网络连接,接受请求后,将句柄通过pipe传递给worker。使用Libevent处理事件。多线程能够充分发挥多核CPU的作用,但引入了锁的问题,比如stats命令(全局变量加锁计数),会带来性能损耗(较小)。
[img]http://dl2.iteye.com/upload/attachment/0090/9538/d21124ed-126e-390a-80c7-08e91270f9a9.png[/img]
http://memcached.org/
【简介】
为什么会有Memcache和memcached两种名称?
其实Memcache是这个项目的名称,而memcached是它服务器端的主程序文件名。
Memcache官方网站:http://www.danga.com/memcached,http://memcached.org/
针对WEB2.0,出现了以下的特点:
[img]http://dl2.iteye.com/upload/attachment/0090/9540/b775f653-3881-38f2-b745-87a5b97f6b4f.png[/img]
许多Web应用都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示。但随着数据量的增大、访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、网站显示延迟等重大影响。
这时就该memcached大显身手了。memcached是高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。
[img]http://dl2.iteye.com/upload/attachment/0089/3986/26fc2e13-e314-33f3-b150-7116712afa01.jpg[/img]
memcached作为高速运行的分布式缓存服务器,具有以下的特点。
• 协议简单
• 基于libevent的事件处理
• 内置内存存储方式
• memcached不互相通信的分布式
【个人心得】
集中分布式技术(不是很流行)
magent,moxi
现在一般都是用客户端的一致性hash解决分布式集群问题
【过期淘汰】
[list]
[*]Lazy Expiration:即使设置超时,也不会主动回收内存,只有当get时再主动查看记录是否过期,即能解释为何Memcached吃内存只进不出
[*]Last Recently Used:当内存空间不足分配时,扫描最后几条条记录,通过LRU方式淘汰掉。可通过-M参数禁用----就是在一个时间窗口内,寻找调用次数最少的淘汰掉,而不是总时间里,调用次数最少的。
[/list]
陷阱
陷阱1:每一个slab有一个自己的LRU链表,且slab间不共享链表。
陷阱2:未过期的数据可能比已过期的数据先被抹掉。
【进程模型】
典型的多线程,由一个监听主线程和多个worker子线程组成,主线程监听网络连接,接受请求后,将句柄通过pipe传递给worker。使用Libevent处理事件。多线程能够充分发挥多核CPU的作用,但引入了锁的问题,比如stats命令(全局变量加锁计数),会带来性能损耗(较小)。
[img]http://dl2.iteye.com/upload/attachment/0090/9538/d21124ed-126e-390a-80c7-08e91270f9a9.png[/img]