安装memcached
Memcached依赖于libevent API(Reahat系统中也安装有libevent1.4版本),因此如果要想使用更高版本可以自行编译安装但是不要覆盖系统自带的libevent版本其它软件需要依赖,libevent项目主页:http://libevent.org/
1 2 3 4 5 6 |
[root@localhost ~]# tar xvf libevent-2.0.22-stable.tar.gz [root@localhost ~]# cd libevent-2.0.22-stable [root@localhost libevent-2.0.22-stable]# ./configure --prefix=/usr/local/libevent [root@localhost libevent-2.0.22-stable]# make && make install [root@localhost ~]# echo "/usr/local/libevent/lib" > /etc/ld.so.conf.d/libevent.conf [root@localhost ~]# ldconfig |
安装memcached
1 2 3 4 5 |
[root@localhost ~]# tar xvf memcached-1.4.25.tar.gz [root@localhost ~]# cd memcached-1.4.25 [root@localhost memcached-1.4.25]#./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent [root@localhost memcached-1.4.25]# make && make install [root@localhost memcached-1.4.25]# ln -sv /usr/local/memcached/bin/* /usr/bin |
Memcached常用选项
1 |
[root@localhost ~]# memcached -h |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
-l <ip_addr> #指定进程监听的地址; -d #以服务模式运行在后台; -u <username> #以指定的用户身份运行memcached进程,可以nobody; -m <num> #用于缓存数据的最大内存空间,单位为MB,默认为64MB; -c <num> #最大支持的并发连接数,默认为1024; -p <num> #指定监听的TCP端口,默认为11211; -U <num> #指定监听的UDP端口,默认为11211,0表示关闭UDP端口; -t <threads> #用于处理入站请求的最大线程数,仅在memcached编译时开启了支持线程才有效; -f <num> #设定Slab Allocator定义预先分配内存空间大小固定的块时使用的增长因子; -M #当内存空间不够使用时返回错误信息,而不是按LRU算法清除其他缓存空间; -n <num> #指定最小的slab chunk大小,默认是48字节; -l <num> #指定最大的slab chunk大小,默认是1M; -S #启用sasl进行用户认证; -vv #显示memcached启动时slab分配过程; |
启动memcache
1 2 3 4 |
[root@localhost ~]# memcached -u nobody -d -m 512 [root@localhost ~]# netstat -anplt | grep memcache tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN 5770/memcached tcp 0 0 :::11211 :::* LISTEN 5770/memcached |
Memcached操作命令
Memcached提供了为数不多的几个命令来完成与服务器端的交互,这些命令基于memcached的协议实现。
1)存储类命令
1 2 3 4 5 |
set #设置一个键; add #添加一个新键; replace #替换一个现有键的值; append #在一个以存在键的值后面新增一个值; prepend #在一个以存在键的前面新增一个值; |
共用的语法是:
1 2 |
>>> command <key_name> <flags> < timeout> <datasize> >>> <value> |
参数含义:
key_name – key用于查找缓存值。
flags – 可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息。
timeout – 在缓存中保存键值对的时间长度(以秒为单位,0表示永远)。
datasize – 在缓存中存储的字节点,以字节为单位。
value – 存储的值(始终位于第二行)。
2)获取数据类命令
1 2 3 4 |
get #或取一个键的值; delete #删除一个键; incr #让某些键自动加1; decr #让某些键自动减1; |
共用的语法是:
1 |
>>> command key_name |
使用案例
1 |
[root@localhost ~]# telnet 127.0.0.1 11211 |
1 2 3 4 5 6 7 |
>>> add mykey 0 30 6 >>> Hello! STORED >>> get mykey VALUE mykey 0 12 Hello! END |
3)统计类命令
stats – 查看memcached状态
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
stats STAT pid 6624 #Memcache服务器的进程ID STAT uptime 557 #服务器已经运行的秒数 STAT time 1453224110 #服务器当前的UNIX时间戳 STAT version 1.4.25 #Memcache的版本号 STAT libevent 2.0.22-stable #Libevent的版本号(memcached使用libevent epoll模型) STAT pointer_size 64 #当前操作系统的指针大小 STAT rusage_user 0.016997 #进程的累计用户时间 STAT rusage_system 0.049992 #进程的累计系统时间 STAT curr_connections 10 #当前打开着的连接数 STAT total_connections 13 #从服务器启动以后曾经打开过的连接数 STAT connection_structures 11 #服务器分配的连接构造数 STAT reserved_fds 20 #内部使用的FD数 STAT cmd_get 2 #get命令获取总请求数 STAT cmd_set 5 #set命令获取总请求数 STAT cmd_flush 0 #flush命令获取总请求数 STAT cmd_touch 0 #touch命令获取总请求数 STAT get_hits 1 #get命令命中次数 STAT get_misses 1 #get命令未命中次数 STAT delete_misses 0 #delete命令未命中次数 STAT delete_hits 0 #delete命令命中次数 STAT incr_misses 0 #incr命令未命中次数 STAT incr_hits 0 #incr命令命中次数 STAT decr_misses 0 #decr命令未命中次数 STAT decr_hits 0 #decr命令命中次数 STAT cas_misses 0 #cas命令未命中次数 STAT cas_hits 0 #cas命令命中次数 STAT cas_badval 0 #使用擦拭次数 STAT touch_hits 0 #touch命令命中次数 STAT touch_misses 0 #touch命令未命中次数 STAT auth_cmds 0 #认证命令处理的次数 STAT auth_errors 0 #认证失败数目 STAT bytes_read 244 #总读取字节数 STAT bytes_written 173 #总发送字节数 STAT limit_maxbytes 67108864 #分配给memcache的内存大小 STAT accepting_conns 1 #接受新的连接 STAT listen_disabled_num 0 #失效的监听数 STAT time_in_listen_disabled_us 0 STAT threads 4 #当前线程数 STAT conn_yields 0 #连接操作主动放弃数目 STAT hash_power_level 16 #hash表等级 STAT hash_bytes 524288 #当前hash表大小 STAT hash_is_expanding 0 #hash表正在扩展 STAT malloc_fails 0 STAT bytes 76 #当前服务器存储items占用的字节数 STAT curr_items 1 #服务器当前存储的item数量 STAT total_items 2 #从服务器启动以后存储的items总数量 STAT expired_unfetched 0 #已过期但未获取的对象数目 STAT evicted_unfetched 0 #已驱逐但未获取的对象数目 STAT evictions 0 #LRU释放的对象数目 STAT reclaimed 0 #已过期的数据条目来存储新数据的数目 STAT crawler_reclaimed 0 STAT crawler_items_checked 0 STAT lrutail_reflocked 0 |
结合这些值,我们可以确定缓存的状态以及利用率如何。
初次启动缓存时,可以看到get_misses会自然地增加,但在经过一定的使用量之后,这些get_misses值应该会逐渐趋于平稳,这表示缓存主要用于常见的读取操作。如果您看到get_misses继续快速增加,而get_hits逐渐趋于平稳,则需要确定一下所缓存的内容是什么。您可能缓存了错误的内容。确定缓存效率的另一种方法是查看缓存的命中率(hit ratio)。缓存命中率表示执行get的次数与错过get的次数的百分比。要确定这个百分比,需要再次运行stats命令,用get_hits的数值除以cmd_gets,比率越高越好。查看统计数据并不时测量它们可以很好地判定缓存策略的效率。
另外看bytes可以确定当前memcached实际使用的内存大小,但这是实际使用的内存大小,不等于memcached占用的内存大小。要查看memcached占用的内存大小可以直接看此memcached的进程显示结果。如下显示已经占用了211860K大小:
1 |
nobody 139144 6.5 0.1 606416 211860 ? Sl 10:10 3:41 /usr/bin/memcached -m 18432 -p 11211 -u nobody -l 0.0.0.0 -c 819000 -b 65535 |
stats items – 查看item信息,每一组slab对应一组item值,以下显示一组items
1 2 3 4 5 6 7 8 9 10 11 12 13 |
stats items STAT items:1:number 18184 STAT items:1:age 2207 STAT items:1:evicted 0 STAT items:1:evicted_nonzero 0 STAT items:1:evicted_time 0 STAT items:1:outofmemory 0 STAT items:1:tailrepairs 0 STAT items:1:reclaimed 0 STAT items:1:expired_unfetched 0 STAT items:1:evicted_unfetched 0 STAT items:1:crawler_reclaimed 0 STAT items:1:lrutail_reflocked 0 |
stats slabs – 查看slab信息,这里只显示一组slab信息,默认有多少组slab就会有多少信息显示;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
stats slabs STAT 1:chunk_size 96 #此组slabs中chunk的大小; STAT 1:chunks_per_page 10922 STAT 1:total_pages 2 #此组slabs当前一共申请了多少个Page(一个Page为1M); STAT 1:total_chunks 21844 #此组slabs一共有多少个chunk; STAT 1:used_chunks 18498 #此组slabs当前正在使用的chunk数量; STAT 1:free_chunks 3346 #词组slabs当前未使用的chunk数量; STAT 1:free_chunks_end 0 STAT 1:mem_requested 1704171 STAT 1:get_hits 695746 STAT 1:cmd_set 160754 STAT 1:delete_hits 14339 STAT 1:incr_hits 0 STAT 1:decr_hits 0 STAT 1:cas_hits 0 STAT 1:cas_badval 0 STAT 1:touch_hits 0 STAT active_slabs 1 #此memcached实例一共有多少个slabs; STAT total_malloced 1048512 |
通过查看slabs信息,可以确定每个slabs占用了多少内存,一个有多少个chunk,每个chunk有多大,以及当前未使用的chunk数量。
stats sizes – 查看key存储大小以及对应的数量,可以统计出实际存储大小;
1 2 3 |
stats sizes STAT 96 18624 ... |
4)清除命令
1 |
flush_all |
5)退出命令
1 |
quit |
使用telnet命令测试memcached命令使用
1 |
[root@localhost ~]# telnet 127.0.0.1 11211 |
1)add/get命令
1 2 3 4 5 6 7 |
>>> add mykey 0 30 6 >>> Hello! STORED >>> get mykey VALUE mykey 0 12 Hello! END |
2)set/incr/decr命令
1 2 3 4 5 6 7 8 9 10 11 |
>>> set num 0 0 3 >>> 100 STORED >>> get num VALUE num 0 3 100 END >>> incr num 1 101 >>> decr num 1 100 |
3)delete/get命令
1 2 3 4 |
>>> delete num DELETED >>> get num END |
Memadmin工具
Memadmin是memcached网页管理工具,是PHP语言写的,所以运行需要LANMP环境。
1 2 3 4 |
[root@localhost ~]# tar xvf memadmin-1.0.12.tar.gz [root@localhost ~]# mv memadmin /usr/local/httpd/htdocs/ [root@localhost ~]# vi /usr/local/httpd/htdocs/memadmin/config.php #进memcached配置文件可以修改用户名和密码默认都是admin |
连接查看支持简体中文配置连接memcached主机
Memcached支持计数器就是incr/decr命令,比如网页浏览一次加一、商品卖掉一个就减一等操作。