第1章 Memcached服务安装
1.1 安装Memcached服务端
1.1.1 系统安装环境
[root@m01 ~]# cat /etc/redhat-release CentOS release 6.9 (Final) [root@m01 ~]# uname -r 2.6.32-696.el6.x86_64
1.1.2 安装依赖程序
[root@m01 ~]# yum install -y libevent libevent-devel nc
1.1.3 yum安装低版本Memcached
[root@m01 ~]# yum install -y memcached
1.1.4 编译安装高版本Memcached
[root@m01 ~]# cd /server/tools/ [root@m01 tools]# tar xf memcached-1.5.2.tar.gz [root@m01 tools]# cd memcached-1.5.2 [root@m01 memcached-1.5.2]# ./configure [root@m01 memcached-1.5.2]# make && make install
1.2 Memcached服务的基本管理
1.2.1 启动Memcached
[root@m01 ~]# which memcached /usr/local/bin/memcached [root@m01 ~]# memcached -m 16m -p 11211 -d -u root -c 1024 [root@m01 ~]# ps -ef | grep [m]emcache root 3676 1 0 11:28 00:00:00 memcached -m 16m -p 11211 -d -u root -c 1024 [root@m01 ~]# netstat -lntup | grep memcached tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN 3676/memcached tcp 0 0 :::11211 :::* LISTEN 3676/memcached udp 0 0 0.0.0.0:11211 0.0.0.0:* 3676/memcached udp 0 0 :::11211 :::* 3676/memcached
1.2.2 启动多个Memcached实例
[root@m01 ~]# memcached -m 16m -p 11212 -d -u root -c 1024 [root@m01 ~]# ps -ef | grep [m]emcache root 3676 1 0 11:28 00:00:00 memcached -m 16m -p 11211 -d -u root -c 1024 root 3699 1 0 11:31 00:00:00 memcached -m 16m -p 11212 -d -u root -c 1024 [root@m01 ~]# netstat -lntup | grep memcached tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN 3676/memcached tcp 0 0 0.0.0.0:11212 0.0.0.0:* LISTEN 3699/memcached tcp 0 0 :::11211 :::* LISTEN 3676/memcached tcp 0 0 :::11212 :::* LISTEN 3699/memcached udp 0 0 0.0.0.0:11211 0.0.0.0:* 3676/memcached udp 0 0 0.0.0.0:11212 0.0.0.0:* 3699/memcached udp 0 0 :::11211 :::* 3676/memcached udp 0 0 :::11212 :::* 3699/memcached
1.2.3 加入开机自启动
[root@m01 ~]# echo 'memcached -m 16m -p 11211 -d -u root -c 1024' >> /etc/rc.local [root@m01 ~]# echo 'memcached -m 16m -p 11212 -d -u root -c 1024' >> /etc/rc.local [root@m01 ~]# tail -2 /etc/rc.local memcached -m 16m -p 11211 -d -u root -c 1024 memcached -m 16m -p 11212 -d -u root -c 1024
1.3 Memcached启动命令相关参数说明
命令参数 | 说明 |
进程与连接设置 | |
-d | 以守护进程(daemon)方式运行服务 |
-u | 指定运行Memcached的用户,如果当前用户为root,需要使用此参数指定用户 |
-l | 指定Memcached进程监听的服务器IP地址,可以不设置此参数 |
-p(小写) | 指定Memcached服务监听TCP端口号。默认11211 |
-P(大写) | 设置保存Memcached的pid文件($$),保存PID到指定文件 |
内存相关设置 | |
-m | 指定Memcached服务可以魂村数据的最大内存,默认为64MB |
-M | Memcached服务内存不够时禁止LRU,如果内存满了会报错 |
-n | 为key+value+flags分配的最小内存空间,默认为48字节 |
-f | chunk size增长因子,默认为1.25 |
-L | 启用大内存页,可以降低内存浪费,改进性能 |
并发连接设置 | |
-c | 最大的并发连接数,默认是1024 |
-t | 线程数默认4,由于Memcached采用的是NIO,所以太多线程作用不大 |
-R | 每个event最大请求数,默认是20 |
-C | 禁用CAS(可以禁用版本计数,减少开销) |
调试参数 | |
-v | 打印较少的errors/warnings |
-vv | 打印非常多调试信息和错误输出到控制台,也打印客户端命令及响应 |
-vvv | 打印极多的调试信息和错误输出,也打印内部状态转变 |
1.4 向Memcached中写入数据并检查
1.4.1 Memcached中的数据形式及与MySQL先关语句对比
MySQL数据库管理 | Memcached/Redis管理 |
MySQL的insert语句 | Memcached的set命令 |
MySQL的select语句 | Memcached的get命令 |
MySQL的delete语句 | Memcached的delete命令 |
1.4.2 向Memcached中写入数据测试
- 通过printf配合nc向Memcached中写入数据,命令如下:
[root@m01 ~]# printf "set key1 0 0 6\r\noldboy\r\n"|nc 127.0.0.1 11211 STORED # 出现STORED表示成功添加key1及对应的数据
- 如果set命令的字节是6,那么后面就要6个字符(字节)。否则插入数据就会不成功。示例:
[root@m01 ~]# printf "set key1 0 0 5\r\noldboy\r\n"|nc 127.0.0.1 11211 CLIENT_ERROR bad data chunk ERROR
- 通过printf配合nc从Memcached中读取数据,命令如下:
[root@m01 ~]# printf "get key1\r\n"|nc 127.0.0.1 11211 VALUE key1 0 6 oldboy # key1对应的值 END
- 通过printf配合nc从Memcached中删除数据,命令如下:
[root@m01 ~]# printf "delete key1\r\n"|nc 127.0.0.1 11211 DELETED # DELETED表示删除成功
1.4.3 通过telnet命令写入数据测试
- 安装telnet工具:
[root@m01 ~]# yum install -y telnet
- 通过telnet向Memcached中写入数据:
[root@m01 ~]# telnet 127.0.0.1 11211 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. set user01 0 0 7 # 写入数据 oldgirl STORED get user01 # 浏览数据 VALUE user01 0 7 oldgirl END delete user01 # 删除数据 DELETED quit Connection closed by foreign host.
1.5 操作Memcached相关命令的语法
1.5.1 基本语法
set key1 0 0 5 \r\n oldboy \r\n <command name> <key> <flags> <exptime> <bytes>\r\n<datablock>\r\n<status>\r\n
1.5.2 相关命令的详细说明
命令 | 说明 |
command name | set:强制进行写入数据,会覆盖老数据
add:只有对应数据不存在时才添加数据 repalce:只有数据存在时进行替换数据 append:往后追加数据:append <key> datablock <status> prepend:往前追加数据:prepend <key> datablock <status> cas:按版本号更改 |
key | 普通字符串,要求小于250个字符,不包含空格和控制字符 |
flags | 客户端用来标识数据格式的数值,如json、xml、压缩等 |
exptime | 存活时间s ,0为永远,小于30天,60×60×24×30为秒数,大于30天为unixtime |
bytes | byte字节数,不包含\r\n,根据长度截取存/取的字符串,可以是0,即存空串 |
datablock | 文本行,以\r\n结尾,当然可以包含\r或\n |
status | STORED/NOT_STORED/EXISTS/NOT_FOUND
ERROR/CLIENT_ERROR/SERVER_ERROR服务器端会关闭连接以修复 |
1.6 关闭Memcached
[root@m01 ~]# pkill memcached 或 [root@m01 ~]# killall memcached
1.7 企业场景中如何配置Memcached
在企业实际中作中,一般是开发人员提出需求,说要部署一个Memcached数据缓存。运维人员在接到这个不太确定的需求后,需要和开发人员深入沟通,进而确定要将内存指定为多大,或者和开发人员商量如何根据具体业务来指定内存缓存的大小。此外还要确定业务的重要性,进而决定是否采取负载均衡、分布式缓存集群等架构,最后确定使用多大的并发连接数等。
对于运维人员部署Memcached一般就是安装Memcached服务器端,把服务启动起来,做好监控,配好开机启动基本就完成了,客户端的PHP程序环境一般在安装LNMP环境时都会提前安装Memcached客户端插件,Java程序环境下,开发人员会用第三方JAR包直接连接Memcached服务。
第2章 安装Memcached客户端
2.1 Memcached缓存PHP扩展插件安装
[root@web01 ~]# cd /server/tools/ [root@web01 tools]# tar xf memcache-2.2.7.tgz [root@web01 tools]# cd memcache-2.2.7 [root@web01 memcache-2.2.7]# /usr/local/php/bin/phpize Configuring for: PHP Api Version: 20121113 Zend Module Api No: 20121212 Zend Extension Api No: 220121212 [root@web01 memcache-2.2.7]# ./configure --enable-memcache --with-php-config=/usr/local/php/bin/php-config [root@web01 memcache-2.2.7]# make && make install
2.2 配置Memcache客户端
[root@web01 ~]# echo 'extension = memcache.so' >> /usr/local/php/lib/php.ini [root@web01 ~]# tail -1 /usr/local/php/lib/php.ini extension = memcache.so
2.3 重启php fpm服务
[root@web01 ~]# /usr/local/php/sbin/php-fpm -t # 检查php-fpm服务 [07-Oct-2017 13:47:12] NOTICE: configuration file /usr/local/php-5.5.32/etc/php-fpm.conf test is successful [root@web01 ~]# pkill php-fpm [root@web01 ~]# /usr/local/php/sbin/php-fpm

2.4 生成测试页面
cat >>/usr/local/nginx/html/wordpress/mc.php<<'EOF' # 此处使用'EOF',否则$后的变量会被解析 < php $memcache = new Memcache; $memcache->connect('10.0.0.61', 11211) or die ("Could not connect"); $memcache->set('key20171017', 'oldboy0326'); $get_value = $memcache->get('key20171017'); echo $get_value; > EOF

第3章 安装部署memadmin
3.1 安装memadmin
提示:安装memadmin网站的服务器必须要先安装memcached的客户端。
3.1.1 安装memadmin的web程序
[root@m01 ~]# cd /server/tools/ [root@m01 tools]# tar xf memadmin-1.0.12.tar.gz [root@m01 tools]# mv memadmin /usr/local/nginx/html/
3.1.2 编辑nginx的web配置文件
[root@m01 ~]# vim /usr/local/nginx/conf/nginx.conf # 添加如下server模块 25 server { 26 listen 8000; 27 server_name localhost; 28 location / { 29 root html/memadmin; 30 index index.php index.html index.htm; 31 } 32 location ~* .*\.(php|php5) $ { 33 root html/memadmin; 34 fastcgi_pass 127.0.0.1:9000; 35 fastcgi_index index.php; 36 include fastcgi.conf; 37 } 38 }
3.1.3 重启nginx
[root@m01 ~]# nginx -t nginx: the configuration file /usr/local/nginx-1.12.1/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx-1.12.1/conf/nginx.conf test is successful [root@m01 ~]# nginx -s reload
3.2 测试memadmin网站
3.3 Zabbix监控Memcached服务方式
- 监听port或进程
- 可以模拟用户先set后get,比对get内容是不是set的。crond nagios zabbix
- 监控命中百分比
- 监控响应时间及需要的状态

我的微信
如果有技术上的问题可以扫一扫我的微信