What is Memcached ?
Free & open source, high-performance, distributed memory object caching system
一个开源,免费的高性能,分布式内存缓存系统。
在我们的应用程序中,一般会将数据库的一些经常需要查询用到的数据缓存至Memcached,以提高动态Web应用的响应速度。如下图所示:
快速体验Memcached
由于Memcached使用到了基于libevent的事件处理机制,因此安装之前需要确保已经安装libevent库。由于我用的是最新稳定版1.4.22(下载网址:
http://memcached.org/),对libevent的版本还有要求,如果版本过低,还不能启动Memcached,可以到
http://libevent.org/ 下载较新的libevent版本使用。
【关于libevent的简要说明:libevent就是一个程序库,他将Linux的epoll、BSD系统的kqueue等事件处理机制封装成统一的接口,即使对服务器的连接增加,也能发挥0(1)的性能。Memcached使用这个库,可以在Linux平台上发挥其高性能。】
过程如下:
1
2
3
4
5
6
7
8
9
| tar -xf libevent-2.0.20-stable.tar.gz
cd libevent-2.0.20-stable
./configure --prefix=/usr/local/libevent
make
make install
tar -xf memcached-1.4.22.tar.gz
cd memcached-1.4.22
./configure --prefix=/usr/local/memached --with-libevent=/usr/local/libevent/
make && make install
|
启动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
| [iyunv@www bin]# ./memcached -p 11211 -m 64 -f 1.5 -u nobody -vvv -d
slab class 1: chunk size 80 perslab 13107
slab class 2: chunk size 120 perslab 8738
slab class 3: chunk size 184 perslab 5698
slab class 4: chunk size 280 perslab 3744
slab class 5: chunk size 424 perslab 2473
slab class 6: chunk size 640 perslab 1638
slab class 7: chunk size 960 perslab 1092
slab class 8: chunk size 1440 perslab 728
slab class 9: chunk size 2160 perslab 485
slab class 10: chunk size 3240 perslab 323
slab class 11: chunk size 4864 perslab 215
slab class 12: chunk size 7296 perslab 143
slab class 13: chunk size 10944 perslab 95
slab class 14: chunk size 16416 perslab 63
slab class 15: chunk size 24624 perslab 42
slab class 16: chunk size 36936 perslab 28
slab class 17: chunk size 55408 perslab 18
slab class 18: chunk size 83112 perslab 12
slab class 19: chunk size 124672 perslab 8
slab class 20: chunk size 187008 perslab 5
slab class 21: chunk size 280512 perslab 3
slab class 22: chunk size 420768 perslab 2
slab class 23: chunk size 631152 perslab 1
slab class 24: chunk size 1048576 perslab 1
|
可以利用./memcached -h的方式来了解一些选项的作用:
-p TCP port number to listen on (default: 11211) 指定端口
-l interface to listen on (default: INADDR_ANY, all addresses)
监听地址,想一想,如果我们的机器上有多个网卡我们监听在哪个网卡上呢?
-d run as a daemon 表示以一个后台服务的方式运行
-u assume identity of (only when run as root)
以哪个用户的身份运行
-m max memory to use for items in megabytes (default: 64 MB)
以M为单位指定最大的内存空间
-f chunk size growth factor (default: 1.25)
指定增长因子
-n minimum space allocated for key+value+flags (default: 48)
最小存储单位。实际上,这里指定的是最小的slab chunk大小
在上面启动过程中,我们使用了-vvv的方式输出了启动过程的详细信息,那么slab class , chunk这些是什么呢?增长因子又是干什么的?
端口验证:
1
2
3
| [iyunv@www ~]# netstat -tnlp | grep 11211
tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN 3292/memcached
tcp 0 0 :::11211 :::* LISTEN 3292/memcached
|
Memcached启动后,我们怎么连接进行操作呢?
要知道Memcached是基于Client/Server架构的,上面的是启动Server端,表示Memcached已经有64M内存空间来进行缓存数据管理。至于设置哪些缓存数据,数据有效期是多少等这些都是客户端的事情。很多语言都实现了Memcached客户端,比如Java/PHP等。需要注意的是,Memcached的一个重要特征--协议简单。比如,我们就可以使用telnet来操作Memcached:
1
2
3
4
5
| [iyunv@www ~]# telnet 192.168.204.88 11211
Trying 192.168.204.88...
Connected to www.zfz2.com (192.168.204.88).
Escape character is '^]'.
stats
|
stats命令可以获取到Memcached运行时相关信息。
一些常用命令:
add命令 添加新键
add keyname flag timeout datasize
1
2
3
| add name 0 30 5
hello
STORED
|
get命令 取得键值
get keyname
1
2
3
4
| get name
VALUE name 0 5
hello
END
|
set 无条件设置一个键
说白了,就是有键则覆盖,无键则添加。
set keyname flag timeout datasize
replace 替换已经存在的KEY
replace keyname flag timeout datasize
append keyname flag timeout append_datasize
prepend keyname flag timeout prepend_datasize
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| add name 0 60 5
hello
STORED
get name
VALUE name 0 5
hello
END
append name 0 60 2
aa
STORED
get name
VALUE name 0 7
helloaa
END
|
incr keyname increments 对键值增长
decr keyname decrements 对键值减少
1
2
3
4
5
6
7
8
| add score 0 120 1
1
STORED
incr score 2
3
get score
VALUE score 0 1
3
|
delete keyname 删除指定键
flush_all 清理所有键
stats 状态信息
quit 表示退出
version 查看版本