MemCache 使用总结

一、安装

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扩展】

1、访问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组件还不太熟悉吧。

你可能感兴趣的:(IT新技术,memcached,服务器,linux)