首页 > 开发 > 综合 > 正文

memcached随笔记

2024-07-21 02:04:14
字体:
来源:转载
供稿:网友

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参数可以禁掉此功能。当然,不建议使用。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表