memcached(一)初识

官方地址:
http://memcached.org/
【简介】
    为什么会有Memcache和memcached两种名称?
    其实Memcache是这个项目的名称,而memcached是它服务器端的主程序文件名。
    Memcache官方网站:http://www.danga.com/memcached,http://memcached.org/
    针对WEB2.0,出现了以下的特点:

    许多Web应用都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示。但随着数据量的增大、访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、网站显示延迟等重大影响。
    这时就该memcached大显身手了。memcached是高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。


memcached作为高速运行的分布式缓存服务器,具有以下的特点。
• 协议简单
• 基于libevent的事件处理
• 内置内存存储方式
• memcached不互相通信的分布式

【个人心得】
集中分布式技术(不是很流行)
magent,moxi
现在一般都是用客户端的一致性hash解决分布式集群问题

【过期淘汰】
  • Lazy Expiration:即使设置超时,也不会主动回收内存,只有当get时再主动查看记录是否过期,即能解释为何Memcached吃内存只进不出
  • Last Recently Used:当内存空间不足分配时,扫描最后几条条记录,通过LRU方式淘汰掉。可通过-M参数禁用----就是在一个时间窗口内,寻找调用次数最少的淘汰掉,而不是总时间里,调用次数最少的。

陷阱
陷阱1:每一个slab有一个自己的LRU链表,且slab间不共享链表。
陷阱2:未过期的数据可能比已过期的数据先被抹掉。

【进程模型】
    典型的多线程,由一个监听主线程和多个worker子线程组成,主线程监听网络连接,接受请求后,将句柄通过pipe传递给worker。使用Libevent处理事件。多线程能够充分发挥多核CPU的作用,但引入了锁的问题,比如stats命令(全局变量加锁计数),会带来性能损耗(较小)。

猜你喜欢

转载自phl.iteye.com/blog/1943204