T086学习网 | 站长学院 | 技术文档 | 成语 | 歇后语 | 帝国时代 | 代码收藏 | IP地址查询 | 生活百科 | 生日密码 | CSS压缩 | 用户评论 | 欣欣百宝箱

memcached随笔记

【 作者:虎之 更新时间:2011-04-15 | 字体:
[导读]memcached大名鼎鼎,数据库有压力时都会请此君来缓解缓解。因常遇到些问题,读些文章,随笔做些记录。整理后,有此文。 memcached是什么? web应用数据保存在RDBMS中(绝大多数是mysql).从数据库读取数据,随着访问量...

memcached大名鼎鼎,数据库有压力时都会请此君来缓解缓解。因常遇到些问题,读些文章,随笔做些记录。整理后,有此文。

memcached是什么?
web应用数据保存在RDBMS中(绝大多数是mysql).从数据库读取数据,随着访问量增大,出现数据库负担很重,反应很慢的问题。memcached就是解决此问题而生。他将数据缓存到内存中,提高读写数据的能力。

memcached有何特点?
两点:第一,分布式;第二, 缓存。

如何理解分布式

memcached是分布式内存缓存服务器,但服务器端是不互相通信的。简而言之,他的分布式取决于客户端的实现。那么,如何解决如下问题,有三台memcached服务器,如何将key=>value类型的数据存放到memcached中?

方法有两种: 余数计算法和圆点计数法(官方名称,一致性算法).
先看余数计算法.先将memcached服务器标号1,2,3.计算key的hash值。然后初以服务器数量3,得到的余数(如2),则将数据放到2上。
此法优点方法简单,易于分散数据。但问题是,如果增加了一台memcached服务器,key的hash值除以的余数就变了,势必要重组整个缓存数据,代价不小。所以,看下圆点解决之道。
圆点法是基于Consistent Hashing的思想。简单的说,先得出memcached服务器的哈希值,配置到一个0-2的32次方的圆上。然后同样计算出key的哈希值,映射到相同的圆上。从映射的位置开始顺时针查找,将数据保存到找到的第一个服务器上。这样在增加新的memcached服务器的时候,可以最大限度的减少键的重组。

php中Consistent Hashing的实现
memcache客户端的实现:

1 在php.ini中添加memcache.hash_strategy = consistent

memcached客户端的实现:

1 $mc = new Memcached();
2 $mc->setOption(Memcached::OPT_DISTRIBUTION,Memcached::DISTRIBUTION_CONSISTENT);
3 $mc->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE, true);

php客户端memcached vs memcache
怎样区别,也没彻底明白。memcached是基于libmemcached库,版本比memcache要新,支持更多的memcached协议,性能应该优于memcache.

memcached的安装

1 sudo apt-get install memcached
2 yum install libevent lievent-devel memcached

自行编译也可。

memcached的启动

memcached -d -m 1024 -l localhost -p 11711
-p 使用的tcp端口
-m 最大内存使用。默认64M
-d 作为daemon在后台启动

memcached数据操作

1 $mc = new memcached();
2 $key = 'test';
3 $mc->add($key,'okok');//增加数据
4 $mc->get($key);//获取数据
5 $mc->replace($key,'iii');//替换数据
6 $mc->delete($key);//删除数据
7 $mc->increment('count',19);//原子操作
8 ...

memcached的删除机制LRU
内存总有用完的时候,数据也有过期过满的时候。如何删除数据呢? memcached使用LRU(Least Recently Used).即最近最少使用的记录被删除。所以,当分配的内存不足时候,memcached会将最近不被使用的记录空间分配给新的记录。-M参数可以禁掉此功能。当然,不建议使用。

原文:http://www.cardii.net/memcached-note/

  • 转载请注明来源:IT学习网 网址:http://www.t086.com/ 向您的朋友推荐此文章
  • 特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系我们,我们会尽快予以更正。
更多
留言建议ASP探针PHP探针站长Enjoy的Blog
© 2017 T086学习网 - T086.com(原itlearner.com)
RunTime:9.41ms QueryTime:7