memcached

标签: linux


笔者Q:972581034 交流群:605799367。有任何疑问可与笔者或加群交流

环境

[root@cache01 ~]# cat /etc/redhat-release 
CentOS release 6.8 (Final)
[root@cache01 ~]# uname -r
2.6.32-642.el6.x86_64
[root@cache01 ~]# /etc/init.d/iptables status
iptables: Firewall is not running.

所需工具

[root@cache01 ~]# rpm -qa libevent nc telnet
nc-1.84-24.el6.x86_64
libevent-1.4.13-4.el6.x86_64
telnet-0.17-48.el6.x86_64

安装

[root@cache01 ~]# yum install memcached -y
[root@cache01 ~]# rpm -qa memcached
memcached-1.4.4-5.el6.x86_64
[root@cache01 ~]# which memcached
/usr/bin/memcached

服务相关命令

启动

[root@cache01 ~]# memcached -m 16m -p 11211 -d -u root -c 8192
[root@cache01 ~]# lsof -i :11211
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
memcached 1851 root   26u  IPv4  11897      0t0  TCP *:memcache (LISTEN)
memcached 1851 root   27u  IPv6  11898      0t0  TCP *:memcache (LISTEN)
memcached 1851 root   28u  IPv4  11901      0t0  UDP *:memcache 
memcached 1851 root   29u  IPv6  11902      0t0  UDP *:memcache 

说明

-m  #指定使用内存大小,默认64
-p  #指定提供服务的端口,默认11211,可省略
-d  #demo模式
-u  #指定用户
-c  #并发连接数,默认1024

启用多实例

重新启动一个端口号不一样的进程即可

[root@cache01 ~]# memcached -m 16m -p 11212 -d -u root -c 8192
[root@cache01 ~]# ps -ef|grep memcached
root       1851      1  0 19:07 ?        00:00:00 memcached -m 16m -p 11211 -d -u root -c 8192
root       1869      1  0 19:12 ?        00:00:00 memcached -m 16m -p 11212 -d -u root -c 8192

加入开机自启动

echo "memcached -m 16m -p 11211 -d -u root -c 8192" >>/etc/rc.local
echo "memcached -m 16m -p 11212 -d -u root -c 8192" >>/etc/rc.local
[root@cache01 ~]# tail -2 /etc/rc.local 
memcached -m 16m -p 11211 -d -u root -c 8192
memcached -m 16m -p 11212 -d -u root -c 8192

相关参数

 #进程与连接设置
-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  #打印极多的调试信息和错误输出,也打印内部状态转变

向memcached中写入数据

通过printf配合nc向memcached中写入数据


MySQL数据库管理 memcached管理
MySQL的insert语句 memcached的set命令
MySQL的select语句 memcached的get命令
MySQL的delete语句 memcached的delete命令
MySQL的update语句 memcached的replace命令

相关命令详解

命令名

set 无论如何都进行写入数据,会复盖老数据
add 只有对应数据不存在时才添加数据
replace 只有数据存在时进行替换数据
append往后追加:appenddatablock?
prepend往前追加:prependdatablock
cas 按版本号更改

参数

key 普通字符串,要求小于250个字符,不包含空格和控制符
flags 客户端用来标识数据格式的数值,如json,xml,压缩等
exptime 存活时间s,0位永远,小于30天,606024*30为秒数,大于30天为unixtime
bytes byte字节数,不包含\t\n,根据长度截取存/取的字符串,可以是0,即存空串
status STORED/NOT_STORED/EXISTS/NOT_FOUND
ERRORR/CLIENT_ERROR/SERVER_ERROR服务端会关闭连接以修复

用telnet测试写入、读取、删除

[root@cache01 ~]# 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      #set写入,user01表示key值,0表示flags,0,过期时间,字节数
oldgirl    # value
STORED
get user01   #读取
VALUE user01 0 7
oldgirl
END
delete user01   #删除
DELETED
get user01
END
quit
Connection closed by foreign host.

用printf ,nc测试增、删、改、查

[root@cache01 ~]# printf "set key1 0 0 6\r\noldboy\r\n"|nc 127.0.0.1 11211
STORED
[root@cache01 ~]# printf "get key1\r\n"|nc 127.0.0.1 11211
VALUE key1 0 6
oldboy
END
[root@cache01 ~]# printf "replace key1 0 0 6\r\noldgir\r\n"|nc 127.0.0.1 11211
STORED
[root@cache01 ~]# printf "get key1 0 0 6\r\n"|nc 127.0.0.1 11211
VALUE key1 0 6
oldgir
END
[root@cache01 ~]# printf "delete key1\r\n"|nc 127.0.0.1 11211
DELETED

运行多实例时的关闭方法

[root@cache01 ~]# memcached -m 16m -p 11211 -d -u root -c 8192 -P /var/run/11211.pid #大写字母P把进程号放入文件
[root@cache01 ~]# ps -ef|grep memcached
root      25099      1  0 00:04 ?        00:00:00 memcached -m 16m -p 11211 -d -u root -c 8192 -P /var/run/11211.pid
root      25106  25015  0 00:04 pts/0    00:00:00 grep memcached
[root@cache01 ~]# kill `cat /var/run/11211.pid`
[root@cache01 ~]# ps -ef|grep memcached
root      25112  25015  0 00:05 pts/0    00:00:00 grep memcached

应用

确定内存要指定多大,根据具体业务有多少数据指定内存缓存大小。确定业务的重要性,进而决定是否采取负载均衡、分布式缓存集群等架构,确定使用多大的并发连接数等。最后启动服务,做好监控,开机自启动。