memcached的一些特性

1. Memcached是用c/c++语言写的服务器程序,在linux下安装后可以用作daemon服务,这一点跟mysql很像

2. Memcached提供了一套通信协议,Memcached客户端通过这个协议与Memcached服务器进行交互。这个协议是开放的,只要遵循这个协议,任何人可以用任何语言写一个客户端

3. 系统方面

   a.Memcached就是用来占内存的,所以机器的内存越充裕越好。

   b.如果内存存取“慢”了,Memcached就会非常慢。所以,如果你的Linux用上了虚拟内存开始swap了,你的Memcached就会很弱

   c.对CPU的压力不大

   d.为了避免给网络带来压力,你的缓存项最好都是小数据

4. Memcached集群

   a.多个memcached实例一起使用即构成集群。集群的前面并没有前置任何负载均衡或者其它管理集群的东西,集群的结点之间也不会互相通信。

   b.结点之间不会复制数据,一个缓存entry只存一台机器;所以取entry时,客户端自己要知道该去哪台机取

   c.客户端存取缓存项前一般会根据key值决定去哪个结点,这个函数 node = f(key) 称为hashing函数。 最简单的策略是 node = hash(key)/size-of-node,即简单哈希后再用结点数取模

   d.基于结点数取模的寻址策略有个缺点,即在结点数增加时,几乎所有key的hashing值都会变化; 如果增加结点前某个缓存项存在A结点上,增加结点后,由于hashing值的变化,客户端可能会去到B结点读取这个缓存项,结果没读到,缓存的命中率下降。 解决办法是使用Consistent Hashing算法,使用了这种算法后,在遇到增减结点时,只有少部分key的hashing值会变化

   e.客户端还可以自己实现“权重”,即有的机器多收一点缓存,有的少收一点

5. 高级操作

  a. 支持add操作,即当key相同的缓存项不存在时,才会将客户端提交的缓存项保存

 b. 支持cas操作(Check And Set),即乐观锁。应用这种机制时,如果你上次访问某缓存后有它人更新了些缓存,那你再更新缓存就会失败

Leave a Comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.