Memcache是高性能,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。为了提高性能,memcached中保存的数据都存储在memcached内置的内存存储空间中。由于数据仅存在于内存中,因此重启memcached、重启操作系统会导致全部数据消失。另外,内容容量达到指定值之后,就基于LRU(Least Recently Used)算法自动删除不使用的缓存。


        libevent是一套跨平台的事件处理接口的封装,能够兼容包括这些操作系统:Windows/Linux/BSD/Solaris 等操作系统的的事件处理。Memcached 使用libevent来进行网络并发连接的处理,能够保持在很大并发情况下,仍旧能够保持快速的响应能力。所以安装Memcached需先安装libevent。


一、libevent的安装


基础环境的准备 



  1. wget http://sourceforge.net/projects/levent/files/libevent/libevent-2.0/libevent-2.0.22-stable.tar.gz
  2. tar -zxvf libevent-2.0.22-stable.tar.gz
  3. cd libevent-2.0.22-stable
  4. ./configure --prefix=/application/libevent
  5. make
  6. make install


二、Memcache的安装



  1. wget http://www.memcached.org/files/memcached-1.4.29.tar.gz
  2. tar -zxvf memcached-1.4.29.tar.gz
  3. cd memcached-1.4.29
  4. ./configure --prefix=/application/memcached --with-libevent=/application/libevent
  5. make
  6. make install



启动选项介绍:


-p TCP监听端口 (default: 11211)


-U UDP 监听端口 (default: 11211, 0 is off)


-s UNIX socket监听路径,不支持网络


-a UNIX socket访问掩码, 八进制 (default: 0700)


-l <ip_addr> 监听的服务器IP地址 (default: all addresses)



-r 最大限度利用核心文件限制


-u 运行memcached用户


-m 最大的内存使用 (default: 64 MB)


-M 内存耗尽返回错误


-c 最大并发连接 (default: 1024),按照你服务器的负载量来设定。


-k 锁定所有分页内存


-v 输出警告和错误信息


-vv 同时打印客户端请求和返回信息


-vvv 打印内部状态转换信息


-i 打印memcached 和 libevent 版本信息


-P 设置保存pid文件, only used with -d option


-f 块大小增长倍数 (default: 1.25)


-n key+value+flags最小分配空间(default: 48),key+value+flags默认是48


-L 如何有效,尝试使用大内存页。增加内存页大小可以减少失误的TLB数量,提高性能。


-D 指定key和IDs的分隔符 default is “:” (colon). 如果指定此选项,统计信息收集自动开启;


-t 使用的线程数量 (default: 4)


-R 每个事件的最大请求数 (default: 20)


-C 禁止使用 CAS


-b 设置积压队列数限制 (default: 1024)


-B 绑定协议 – one of ascii, binary, or auto (default)


-I 分配给每个slab页(default: 1mb, min: 1k, max: 128m)


服务启动



  1. memcached -d -m 10 -u root -l 192.168.0.122 -p 11200 -c 256 -P /tmp/memcached.pid



-d 选项是启动一个守护进程,


-m 是分配给Memcache使用的内存数量,单位是MB,这里是10MB


-u 是运行Memcache的用户,这里是root


-l 是监听的服务器IP地址,如果有多个地址的话,这里指定了服务器的IP地址192.168.0.122


-p 是设置Memcache监听的端口,这里设置了12000,最好是1024以上的端口


-c 选项是最大运行的并发连接数,默认是1024,这里设置了256,按照你服务器的负载量来设定


-P 是设置保存Memcache的pid文件



检查服务:


1、查看启动的memcache服务:


netstat -lp | grep memcached


2、查看memcache的进程号(根据进程号,可以结束memcache服务:“kill -9 进程号”)


ps -ef | grep memcached


3、查看状态


        对Memcached缓存服务的状态查询,可以先telnet连接上服务:telnet 127.0.0.1 11211 ,然后使用 stats命令查看缓存服务的状态,会返回如下的数据:    



  1. STAT pid 27954
  2. STAT uptime 139
  3. STAT time 1427031155
  4. STAT version 1.4.22
  5. STAT libevent 2.0.22-stable
  6. STAT pointer_size 32
  7. STAT rusage_user 0.005999
  8. STAT rusage_system 0.011998
  9. STAT curr_connections 10
  10. STAT total_connections 11
  11. STAT connection_structures 11
  12. STAT reserved_fds 20
  13. STAT cmd_get 0
  14. STAT cmd_set 0
  15. STAT cmd_flush 0
  16. STAT cmd_touch 0
  17. STAT get_hits 0
  18. STAT get_misses 0
  19. STAT delete_misses 0
  20. STAT delete_hits 0
  21. STAT incr_misses 0
  22. STAT incr_hits 0
  23. STAT decr_misses 0
  24. STAT decr_hits 0
  25. STAT cas_misses 0
  26. STAT cas_hits 0
  27. STAT cas_badval 0
  28. STAT touch_hits 0
  29. STAT touch_misses 0
  30. STAT auth_cmds 0
  31. STAT auth_errors 0
  32. STAT bytes_read 7
  33. STAT bytes_written 0
  34. STAT limit_maxbytes 67108864
  35. STAT accepting_conns 1
  36. STAT listen_disabled_num 0
  37. STAT threads 4
  38. STAT conn_yields 0
  39. STAT hash_power_level 16
  40. STAT hash_bytes 262144
  41. STAT hash_is_expanding 0
  42. STAT malloc_fails 0
  43. STAT bytes 0
  44. STAT curr_items 0
  45. STAT total_items 0
  46. STAT expired_unfetched 0
  47. STAT evicted_unfetched 0
  48. STAT evictions 0
  49. STAT reclaimed 0
  50. STAT crawler_reclaimed 0
  51. STAT lrutail_reflocked 0



参数项说明:


time:服务器当前的unix时间戳


total_items:从服务器启动以后存储的items总数量


connection_structures:服务器分配的连接构造数


version:memcache版本


limit_maxbytes:分配给memcache的内存大小(字节)


cmd_get:get命令(获取)总请求次数


evictions:为获取空闲内存而删除的items数(分配给memcache的空间用满后需要删除旧的items来得到空间分配给新的items)


total_connections:从服务器启动以后曾经打开过的连接数


bytes:当前服务器存储items占用的字节数


threads:当前线程数


get_misses:总未命中次数


pointer_size:当前操作系统的指针大小(32位系统一般是32bit)


bytes_read:总读取字节数(请求字节数)


uptime:服务器已经运行的秒数


curr_connections:当前打开着的连接数


pid:memcache服务器的进程ID


bytes_written:总发送字节数(结果字节数)


get_hits:总命中次数


cmd_set:set命令(保存)总请求次数


curr_items:服务器当前存储的items数量