一、安装
1、memcached安装
windows下安装步骤
下载: https://pan.baidu.com/s/1dDPP9eD
安装:
1、 将安装包解压到硬盘
2、 在终端(也即cmd命令界面)下输入安装
盘符:\memcached安装包位置\memcached.exe -d install
3 、启动
盘符:\memcached安装包位置\memcached.exe -d start
NOTE: 以后memcached将作为windows的一个服务每次开机时自动启动。这样服务器端已经安装完毕了。
linux下安装
centOs : 直接执行 yum install memcached 即可安装成功。
执行 service memcached start 开启memcahe
memcache 官网地址: http://memcached.org/downloads
可以在官网上下载最新的memcache版本并进行编译安装。
Debian/Ubuntu: apt-get install libevent-dev Redhat/Centos: yum install libevent-devel
wget http://memcached.org/latest
tar -zxvf memcached-1.x.x.tar.gz
cd memcached-1.x.x
./configure && make && make test && sudo make install
阿里云云数据库Memcache
云数据库Memcache版( ApsaraDB for Memcache)是基于内存的缓存服务,支持海量小数据的高速访问。云数据库Memcache可以极大缓解对后端存储的压力,提高网站或应用的响应速度。云数据库Memcache支持Key-Value的数据结构,兼容Memcached协议的客户端都可与阿里云云数据库Memcache版进行通信。(https://help.aliyun.com/product/26528.html )
2、安装memcache扩展
windows下安装memcache扩展
【PHP扩展】
2、点击DLL 下载对应windows版本的dll
3、将dll复制到 php/ext/
4、修改php.ini
extension=php_memcache.dll
5、重启web访问即可开启
linux下安装memcache扩展
centOs :
yum install php-pecl-memcache 从启php即可。
或者在linux下编译安装php的扩展,下载地址同上
二、配置
windows服务器下修改memcache配置
1、用内网ip的方式提供web应用服务器调用,不允许直接通过外网调用,如将memcache服务放在192.168.1.168的服务器上
2、修改端口,如改为11200
3、分配内存,如分配1024M(1G内存)
方法如下:
1> 开始 > 运行:regedit(回车)
2> 在注册表中找到:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\memcached Server
3> 默认的ImagePath键的值是:"c:\memcached\memcached.exe" -d runservice,改为:"c:\memcached\memcached.exe" -d runservice -m 512 -p 11200 -l 192.168.1.168
4> 运行DOS重启memcache的服务:memcached -d restart
注:如果将上述IP192.168.1.168 改为127.0.0.1,则可以控制只能本机访问memcached服务,其他任何机器都不能访问,更安全。
可以使用PHP编写的 MemAdmin 应用来监控memcahce运行状态,如果是本机安装,直接运行默认设置即可监控。
MemAdmin下载地址:http://www.junopen.com/memadmin
memcached的基本设置:
-p 监听的端口
-l 连接的IP地址, 默认是本机, 127.0.0.1时仅本机访问,0.0.0.0全域访问
-d start 启动memcached服务
-d restart 重起memcached服务
-d stop|shutdown 关闭正在运行的memcached服务
-d install 安装memcached服务
-d uninstall 卸载memcached服务
-u 以用户的身份运行 (仅在以root运行的时候有效)
-m 最大内存使用,单位MB。默认64MB
-M 内存耗尽时返回错误,而不是删除项
-c 最大同时连接数,默认是1024
-f 块大小增长因子,默认是1.25
-n 最小分配空间,key+value+flags默认是48
-h 显示帮助
一台主机可以在多个端口上起memcached服务,这几个memcached属不同进程
三、监测
查看状态
telnet localhost 11211
输入 stats 进行查看
stats 重点关注
limit_maxbytes: memcached所能使用内存最大数量
bytes: 当前memcached所使用的内存数量
evictions: 被LRU踢掉的items个数
curr_items 当前条目数量
total_items 总共条目数量
看当前使用内存使用bytes占limits_maxbytes比例
看evictions占total_items的比例
命令 quit 退出。
3、各个变量的含义:
STAT pid 22362 //memcache服务器的进程ID
STAT uptime 1469315 //服务器已经运行的秒数
STAT time 1339671194 //服务器当前的unix时间戳
STAT version 1.4.9 //memcache版本
STAT libevent 1.4.9-stable //libevent版本
STAT pointer_size 64 //当前操作系统的指针大小(32位系统一般是32bit,64就是64位操作系统)
STAT rusage_user 3695.485200 //进程的累计用户时间
STAT rusage_system 14751.273465 //进程的累计系统时间
STAT curr_connections 69 //服务器当前存储的items数量
STAT total_connections 855430 //从服务器启动以后存储的items总数量
STAT connection_structures 74 //服务器分配的连接构造数
STAT reserved_fds 20 //
STAT cmd_get 328806688 //get命令(获取)总请求次数
STAT cmd_set 75441133 //set命令(保存)总请求次数
STAT cmd_flush 34 //flush命令请求次数
STAT cmd_touch 0 //touch命令请求次数
STAT get_hits 253547177 //总命中次数
STAT get_misses 75259511 //总未命中次数
STAT delete_misses 4 //delete命令未命中次数
STAT delete_hits 565730 //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 545701515844 //总读取字节数(请求字节数)
STAT bytes_written 1649639749866 //总发送字节数(结果字节数)
STAT limit_maxbytes 2147483648 //分配给memcache的内存大小(字节)
STAT accepting_conns 1 //服务器是否达到过最大连接(0/1)
STAT listen_disabled_num 0 //失效的监听数
STAT threads 4 //当前线程数
STAT conn_yields 14 //连接操作主动放弃数目
STAT hash_power_level 16 //
STAT hash_bytes 524288
STAT hash_is_expanding 0
STAT expired_unfetched 30705763
STAT evicted_unfetched 0
STAT bytes 61380700 //当前存储占用的字节数
STAT curr_items 28786 //当前存储的数据总数
STAT total_items 75441133 //启动以来存储的数据总数
STAT evictions 0 //为获取空闲内存而删除的items数(分配给memcache的空间用满后需要删除旧的items来得到空间分配给新的items)
STAT reclaimed 39957976 //已过期的数据条目来存储新数据的数目
4、应该重点关注的变量:
笔者认为,使用memcache应该主要关注如下变量(已经在上面标红)
cmd_get get请求总次数
get_hits get请求命中总次数
get_misses get请求失败总次数
这三个量可以算出MC的命中率get_hits / cmd_get 或者 get_hits / (get_hits+get_misses) ,这个是使用MC服务最重要的一个量,命中率越高越好。
另外,需要关注:
limit_maxbytes 为MC分配的内存大小
curr_items 当前存储的条目数量
bytes 当前服务使用的MC内存
显然,这两个量标识了,你当前还有多少内存空间富余,也非常重要,当这两个量接近时,可以及时给MC扩容,根据笔者的经验,MC分配的空间不是全部能用的,实际能用的大约是分配空间的 90% 左右,为什么?笔者没有看过memcache的源码,猜测是因为 memcached 本身的key value的索引也是需要耗费一定的内存的,等读了源码再来跟新。
evictions 为获取空闲内存而删除的items数
这个量显然也灰常重要,能看出来有多少items因为空间不足被挤出了MC
STAT pid 1552
STAT uptime 3792
STAT time 1262517674
STAT version 1.2.6
STAT pointer_size 32
STAT curr_items 1
STAT total_items 2
STAT bytes 593
STAT curr_connections 2
STAT total_connections 28
STAT connection_structures 9
STAT cmd_get 3
STAT cmd_set 2
STAT get_hits 2
STAT get_misses 1
STAT evictions 0
STAT bytes_read 1284
STAT bytes_written 5362
STAT limit_maxbytes 67108864
STAT threads 1
END
这里显示了很多状态信息,下边详细解释每个状态项:
1. pid: memcached服务进程的进程ID
2. uptime: memcached服务从启动到当前所经过的时间,单位是秒。
3. time: memcached服务器所在主机当前系统的时间,单位是秒。
4. version: memcached组件的版本。这里是我当前使用的1.2.6。
5. pointer_size:服务器所在主机操作系统的指针大小,一般为32或64.
6. curr_items:表示当前缓存中存放的所有缓存对象的数量。不包括目前已经从缓存中删除的对象。
7. total_items:表示从memcached服务启动到当前时间,系统存储过的所有对象的数量,包括目前已经从缓存中删除的对象。
8. bytes:表示系统存储缓存对象所使用的存储空间,单位为字节。
9. curr_connections:表示当前系统打开的连接数。
10. total_connections:表示从memcached服务启动到当前时间,系统打开过的连接的总数。
11. connection_structures:表示从memcached服务启动到当前时间,被服务器分配的连接结构的数量,这个解释是协议文档给的,具体什么意思,我目前还没搞明白。
12. cmd_get:累积获取数据的数量,这里是3,因为我测试过3次,第一次因为没有序列化对象,所以获取数据失败,是null,后边有2次是我用不同对象测试了2次。
13. cmd_set:累积保存数据的树立数量,这里是2.虽然我存储了3次,但是第一次因为没有序列化,所以没有保存到缓存,也就没有记录。
14. get_hits:表示获取数据成功的次数。
15. get_misses:表示获取数据失败的次数。
16. evictions:为了给新的数据项目释放空间,从缓存移除的缓存对象的数目。比如超过缓存大小时根据LRU算法移除的对象,以及过期的对象。
17. bytes_read:memcached服务器从网络读取的总的字节数。
18. bytes_written:memcached服务器发送到网络的总的字节数。
19. limit_maxbytes:memcached服务缓存允许使用的最大字节数。这里为67108864字节,也就是是64M.与我们启动memcached服务设置的大小一致。
20. threads:被请求的工作线程的总数量。这个解释是协议文档给的,具体什么意思,我目前还没搞明白。
总结:stats命令总体来说很有用,通过这个命令我们很清楚当前memcached服务的各方面的信息。除此之外,我还没有其他方法可以知道这些状态信息。可能还有其他途径,可能我对memcached组件还不太熟悉吧。