最新消息:

Memcached专题一、概述、基本用法和分布式

Linux ipcpu 1587浏览

Memcached专题一、概述和基本用法.md

一、memcached是什么?

memcached 是以LiveJournal旗下Danga Interactive 公司的Brad Fitzpatric 为首开发的一款软件。现在已成为mixi、hatena、Facebook、Vox、LiveJournal 等众多服务中提高Web应用扩展性的重要因素。

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

为了提高性能,memcached 中保存的数据都存储在memcached 内置的内存存储空间中。由于数据仅存在于内存中,因此重启memcached、重启操作系统会导致全部数据消失。另外,内容容量达到指定值之后,就基于LRU(Least Recently Used)算法自动删除不使用的缓存。memcached 本身是为缓存而设计的服务器,因此并没有过多考虑数据的永久性问题。

二、memcached安装和启动

memcached主要是基于Libevent库进行开发的,安装memcached之前需要先安装libevent依赖。

memcached可以使用yum来安装,但由于早先版本会存在一些bug,建议从官网下载编译最新稳定版

启动命令如下

  1. /home/app/memcahced/bin/memcached -d -p 11211 -u memcached -m 25690 -c 1024 -P /var/run/memcached/memcached.pid

启动参数如下

-p 侦听的端口,默认为11211
-m 使用内存大小,默认的64m
-d 作为daemon 在后台启动
-u 启动用户,建议用普通用户启动
-l 侦听的地址,默认为所有可以访问的地址
-M 用于在内存溢出的时候,返回一个错误,禁止自动LRU移出数据,替代的是返回一个error
-P Pid 文件存在的路径,仅限加上-d 参数是用
-c 最大同时的连接数,默认为1024
-f 1.25 增长因子,默认1.25

三、命令行访问memcached

使用telnet可以连接到memcached服务器

stats 命令可以查看服务器状态
flush_all 使已经存在的项目立即失效

一般命令的格式

  1. <command name> <key> <flags> <exptime> <bytes>
  2. <data block>
  3. #@<command name> 命令,例如get、set等
  4. #@<key> 名称,字符串,最大长度是250个字符
  5. #@<flags> 客户端用来标识数据格式的数值
  6. #@<exptime> 存活时间
  7. #@<bytes> 数据字节数

样例如下:

  1. [root@QYER-1-17 ~]#telnet 10.1.1.17 11211
  2. Trying 10.1.1.17...
  3. Connected to 10.1.1.17.
  4. Escape character is '^]'.
  5. set aabbc 0 0 3
  6. abc
  7. STORED
  8. get aabbc
  9. VALUE aabbc 0 3
  10. abc
  11. END
  12. delete aabbc
  13. DELETED
  14. stats
  15. STAT pid 1242
  16. STAT uptime 79555
  17. STAT time 1482636612
  18. STAT version 1.4.4
  19. STAT pointer_size 64
  20. STAT rusage_user 404.116564
  21. STAT rusage_system 1145.397873
  22. ...

使用nc传递命令到memcached
有时我们需要用shell脚本调用memcached,每次telnet岂不是很麻烦,不要怕,下面提供nc传递命令

  1. echo -e 'add my_key 0 60 11\r\nhello world\r' | nc 10.1.1.17 11211
  2. echo "stats items" | nc 10.1.1.17 11211

四、memcache的分布式

memcached虽然称为“分布式”缓存服务器,但服务器端并没有“分布式”功能。服务器端仅包括内存存储功能,其实现非常简单。至于memcached的分布式,则是完全由客户端程序库实现的。这种分布式是memcached的最大特点。

Memcached分布式方法

1.根据余数计算

这种方法简单的说就是”根据服务器的台数的余数来进行分散“。首先求取键所对应的整数哈希值,然后根据余数来选择服务器。

这种方法简单高效,而且数据的分散性也非常的好。但是问题是当增加或者删除一台memcached服务器的时候,余数就会发生巨大的变化。这样就没有办法获取和保存时间相应的服务器。从而会极大的降低缓存的命中率。

2. 一致性哈希

这种方法首先求出memcached服务器的哈希值,然后将它分配到0~2^32的圆上,然后使用同样的办法求出数据的健的哈希值,将其映射到圆上。然后从数据映射的点开始顺时针的查找,将数据保存到查找到的第一台服务器上面。如果超出了2^32仍然没有找到服务器,那么就将数据保存到第一台memcached服务器上面。

这种方法在一定程度上解决了在修改memcached服务器数据的时候对缓存命中率的影响。在一致性哈希算法中,只有在这个圆上,从增加服务器的那个点逆时针遇到的第一台服务器之间的健会受到影响。因此一致性哈希最大限度的抑制了键的重新分布。

五、参考资料

http://www.cnblogs.com/jeffwongishandsome/archive/2011/11/06/2238265.html
http://www.jianshu.com/p/2ca761b21842
http://blog.csdn.net/kongqz/article/details/6695417
http://www.cnblogs.com/rollenholt/p/3381429.html
https://my.oschina.net/andylucc/blog/671447
http://blog.charlee.li/memcached-004/

转载请注明:IPCPU-网络之路 » Memcached专题一、概述、基本用法和分布式