web2.0和web1.0不一样,web1.0以内容为中心,所以web1.0做负载只需缓存内容就可以了,使用反向代理缓存页面就可以解决大部分问题了。而web2.0鼓励用户交互,内容都是动态的,只做反向代理命的话中率低,而且对数据库进行频繁的写,对数据库压力大。所以,web2.0对web1.0更需要使用内存缓存。
memcached高性能的,分布式的内存对象缓存系统,在动态应用中减少数据库负载,提升访问速度。
一、服务端安装
使用weget下载libevent和memcached
libevent: http://monkey.org/~provos/libevent-1.4.9-stable.tar.gz
memcached: http://www.danga.com/memcached/dist/memcached-1.2.6.tar.gz
1.先安装libevent
2.安装memcached
注:如果启动时出现“memcached: error while loading shared libraries: libevent-1.4.so.2: cannot open
二、php安装对memcached的支持
三、使用
可以使用/usr/local/bin/memcached -h获得使用帮助
[root@localhost tools]# /usr/local/bin/memcached -h
启动memcached
/usr/local/bin/memcached -d -u willko -l 192.168.1.102 -p 11211 -m 128
关闭memcached
1.如果有保存进程的pid,可以使用 kill `cat /pid文件地址`来结束进程
2.通过ps aux | grep memcache获得pid,然后kill掉
[root@localhost tools]# ps aux | grep memcache
willko 2888 0.0 0.1 16296 1816 ? Ss 10:45 0:00 /usr/local/bin/memcached -d -u willko -l 192.168.1.102 -p 11211 -m 128
willko 2891 0.0 0.1 16296 1820 ? Ss 10:46 0:00 /usr/local/bin/memcached -d -u willko -l 192.168.1.102 -p 11212 -m 128
root 3889 0.0 0.0 61144 712 pts/0 R+ 15:13 0:00 grep memcache
[root@localhost tools]# kill 2888
或者telnet到memcached获得pid
通过telnet输入stats查看memcached的运行状态
stats
stats reset
stats malloc
stats maps
stats sizes
stats slabs
stats items
stats cachedump slab_id limit_num
stats detail [on|off|dump]
[root@localhost tools]# telnet 192.168.1.102 11212
Trying 192.168.1.102...
Connected to 192.168.1.102 (192.168.1.102).
Escape character is '^]'.
stats
STAT pid 2891
STAT uptime 17253
STAT time 1232868838
STAT version 1.2.6
STAT pointer_size 64
STAT rusage_user 0.002999
STAT rusage_system 0.002999
STAT curr_items 2
STAT total_items 28
STAT bytes 149
STAT curr_connections 19
STAT total_connections 22
STAT connection_structures 20
STAT cmd_get 78
STAT cmd_set 28
STAT get_hits 78
STAT get_misses 0
STAT evictions 0
STAT bytes_read 1374
STAT bytes_written 2674
STAT limit_maxbytes 134217728
STAT threads 1
END
pid 进程pid
uptime 运行时间
time 当前时间
curr_items 当前存储数
total_items 总存储数
bytes 当前存储内容字节
curr_connections 当前连接数
total_connections 总连接数
cmd_get 查询缓存数
get_hits 命中次数
get_misses 无法命中次数
bytes_read 从网络中读取的字节数
bytes_written 向网络发送的字节数
每秒读取 = total_items / uptime * 100%
缓存命中率 = get_hits / cmd_get * 100%
四、优化
1.facebook补丁
五、代理
memagent
http://code.google.com/p/memagent/
六、压力测试
memslap
http://tangent.org/index.pl?node=memslap
参考资料: