安装配置Memcache
Memcache
1.介绍
Memcache是一个高性能,分布式内存对象缓存系统.它的存储形式是基于内存的
key-value的形式,用来存储小块的任意数据(字符串,对象等).这些数据可以被数据库调用,API调用,或者是页面渲染.一般使用的目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态web应用响应的速度,提高可扩展性.
2.安装
根据官网推荐的方式安装.
# 安装依赖 $ yum install -y libevent libevent-dev $ yum install -y perl-Test-Simple $ wget http://memcached.org/latest $ tar -zxvf memcached-1.5.20.tar.gz $ cd memcached-1.5.20 $ ./configure --prefix=/usr/local/memcached 配置安装目录 $ make $ make test $ sudo make install
- 如果
make test报错,是因为没有安装Perl-Test-Simple模块.需要主动安装.参照.将
memcache命令添加到系统环境中.$ vim ~/.bash_profile PATH=$PATH:$HOME/bin:/var/mysql/bin:/usr/local/memcached/bin/ export PATH $ source ~/.bash_profile使用
docker安装,如果你使用的是1panel面板,可以直接在面板中安装.查看
memcache命令帮助[root@localhost ~]# memcached -h memcached 1.5.20 -d 启动一个守护进程,不会阻塞主进程. -m 分配给Memcache使用的内存数量,单位是 MB -u 运行Memcache的用户 -l 监听的服务器IP地址,可以指定多个 -p 指定监听的端口,默认是11211 -c 最大运行的并发连接数,默认是 1024 -P 设置保存Memcache的PID文件. -v 打印错误和警报 -vv 非常冗长,打印错误和警报,同时打印客户端命令和响应. -vvv 非常冗长,除了以上,还会打印出服务器内部状态的转换.运行服务:
- 作为前台进程运行(不是守护进程)
$ memcached -u root -l 192.168.0.101 -p 11211 -m 64
- 作为守护进程运行
$ memcached -u root -l 192.168.0.101 -p 11211 -m 64 -d关闭服务:直接
kill进程即可[root@localhost ~]# memcached -u root -l 192.168.0.101 -p 11211 -m 64 -d [root@localhost ~]# ps aux | grep memcached root 54058 0.0 0.0 413832 1076 ? memcached -u root -l 192.168.0.101 -p 11211 -m 64 -d [root@localhost ~]# kill -9 54058
3.Memcache 连接
可以通过
Telnet的方式来连接到Memcache服务器.$ telnet HOST PORT $ telnet 192.168.0.101 11211
4.存储命令
1.Memcache set 命令
set命令用于将value存储在指定的key中.如果key已经存在,则会更新该key的数据.语法:
set key flags exptime bytes [noreply] value
set关键字flags:可以包括键值对的整数类型,客户机使用它存储关于键值对的额外信息.0表示不需要压缩.exptime:过期时间(以秒为单位,o表示永远)bytes:在缓存中存储的字节数,指定的数目必须和value的字节数相同.noreplay:可选,该参数告知服务器不需要返回数据.value:存储数据,始终位于第二行,key-value中的value.实例:
❯ telnet 192.168.0.101 11211 Trying 192.168.0.101... Connected to 192.168.0.101. Escape character is '^]'. set name 0 900 9 memcached STORED get name VALUE name 0 9 memcached END set dsfsdf ERROR quit Connection closed by foreign host.在以上的输出中
STORED:保存成功后输出.ERROR:在保存失败后输出.
2.Memcache add 命令
add命令用于将value存储在指定的key中.如果key已经存在,则不会更新数据并返回NOT_STORED状态.(过期的key会更新数据.).语法:
add key flags exptime bytes [noreply] value
add关键字flags:可以包括键值对的整数类型,客户机使用它存储关于键值对的额外信息.exptime:过期时间(以秒为单位,o表示永远)bytes:在缓存中存储的字节数.指定的数目必须和value的字节数相同.noreplay:可选,该参数告知服务器不需要返回数据.value:存储数据,始终位于第二行,key-value中的value.实例:
❯ telnet 192.168.0.101 11211 Trying 192.168.0.101... Connected to 192.168.0.101. Escape character is '^]'. add new_key 0 900 10 date_value STORED get new_key VALUE new_key 0 10 date_value END add new_key 0 900 10 test_value NOT_STORED quit Connection closed by foreign host.
3.Memcached replace命令
replace命令用于替换已经存在的key的value.如果key不存在,则替换失败,并返回NOT_STORED.语法:
replace key flags exptime bytes [noreply] value
replace关键字flags:可以包括键值对的整数类型,客户机使用它存储关于键值对的额外信息.exptime:过期时间(以秒为单位,o表示永远)bytes:在缓存中存储的字节数.指定的数目必须和value的字节数相同.noreplay:可选,该参数告知服务器不需要返回数据.value:存储数据,始终位于第二行,key-value中的value.实例:
❯ telnet 192.168.0.101 11211 Trying 192.168.0.101... Connected to 192.168.0.101. Escape character is '^]'. add mykey 0 900 10 date_value STORED get mykey VALUE mykey 0 10 date_value END replace mykey 0 900 16 some_other_value STORED get mykey VALUE mykey 0 16 some_other_value END repalce no_key 0 900 10 ERROR quit Connection closed by foreign host.
4.Memcache append
append用于对已经存在的key的value后面追加数据.语法:
append key flags exptime bytes [noreply] value
append关键字flags:可以包括键值对的整数类型,客户机使用它存储关于键值对的额外信息.exptime:过期时间(以秒为单位,o表示永远)bytes:在缓存中存储的字节数.指定的数目必须和value的字节数相同.noreplay:可选,该参数告知服务器不需要返回数据.value:存储数据,始终位于第二行,key-value中的value.实例:
❯ telnet 192.168.0.101 11211 Trying 192.168.0.101... Connected to 192.168.0.101. Escape character is '^]'. set name 0 900 9 memcached STORED get name VALUE name 0 9 memcached END append name 0 900 5 radis STORED get name VALUE name 0 14 memcachedradis END quit Connection closed by foreign host.它相当的于对存在的
value追加了一段数据.
5.Memcache prepend
prepend用于对已经存在的key的value前面追加数据语法
prepend key flags exptime bytes [noreply] value
prepend关键字flags:可以包括键值对的整数类型,客户机使用它存储关于键值对的额外信息.exptime:过期时间(以秒为单位,o表示永远)bytes:在缓存中存储的字节数.指定的数目必须和value的字节数相同.noreplay:可选,该参数告知服务器不需要返回数据.value:存储数据,始终位于第二行,key-value中的value.实例:
❯ telnet 192.168.0.101 11211 Trying 192.168.0.101... Connected to 192.168.0.101. Escape character is '^]'. set name 0 900 9 memcached STORED get name VALUE name 0 9 memcached END prepend name 0 900 5 radis STORED get name VALUE name 0 14 radismemcached END quit Connection closed by foreign host.
6.Memcached cas
cas(check-and-set\compare-and-swap):用于执行一个检查并设置的操作,它仅仅在当前客户端最后一次取值后,该key对应的值没有被其他客户端修改的情况下,才能写入.检查是
cas_token参数进行的,这个参数是Memcache指定给已经存在的元素的一个唯一的64位值.语法:
cas key flags exptime bytes unique_cas_token [noreply] value
cas关键字flags:可以包括键值对的整数类型,客户机使用它存储关于键值对的额外信息.exptime:过期时间(以秒为单位,o表示永远)bytes:在缓存中存储的字节数.指定的数目必须和value的字节数相同.unique_cas_token:通过gets命令获取的一个唯一的值noreplay:可选,该参数告知服务器不需要返回数据.value:存储数据,始终位于第二行,key-value中的value实例:
- 如果没有
unique_cas_token,则cas命令执行错误.- 如果
key不存在,执行失败.- 添加键值对
- 通过
gets获取token- 使用
cas更新数据- 使用
get查看数据❯ telnet 192.168.0.101 11211 Trying 192.168.0.101... Connected to 192.168.0.101. Escape character is '^]'. cas tp 0 900 9 ERROR # 没有token 报错 cas tp 0 9000 9 2 memcached NOT_FOUND # key 不存在报错 # 生成一个tp set tp 0 900 9 memcached STORED get tp VALUE tp 0 9 memcached END # 获取token==> 10 gets tp VALUE tp 0 9 10 memcached END # 更新tp cas tp 0 900 5 10 radis STORED get tp VALUE tp 0 5 radis END quit Connection closed by foreign host.
7.比较
add/set/replace使用的场合不同
方法 key存在key不存在set替换 创建 add报错 创建 replace替换 报错 appendvalue后方追加数据报错 prependvalue前方追加数据报错
set相当于add和replace的集合体.
5.查找命令
1.Memcache get
get用于获取key中的value,如果key不存在,返回为空.语法:
get key /*多个值之间用空格隔开 */ get key1,key2,key3
2.Memcache gets
gets用户获取cas令牌中的value,如果key不存在,返回为空.语法:
gets key /*多个值之间用空格隔开 */ gets key1,key2,key3
3.Memcache delete
delete用于删除已经存在的key'.语法:
delete key [noreply]
4.Memcache incr/decr
incr/decr用于对已经存在的key的数字值进行自增/自减操作.它操作的数据必须是十进制的32位无符号整数.如果
key不存在返回NOT_FOUND,如果key不是数字,返回CLIENT_ERROR,其他错误返回ERROR.语法:
incr/decr key increment_value
incr增加.decr减少.increment_value:增加的数值.
6.统计命令
1.Memcache stats
返回统计信息,如
PID,版本号,连接数等.❯ telnet 192.168.0.101 11211 Trying 192.168.0.101... Connected to 192.168.0.101. Escape character is '^]'. stats包括以下信息
pidmemcache服务器进程IDuptime服务器已运行秒数 time服务器当前Unix时间戳 versionmemcache版本pointer_size操作系统指针大小 rusage_user进程累计用户时间 rusage_system进程累计系统时间 curr_connections当前连接数量 total_connectionsMemcached运行以来连接总数connection_structuresMemcached分配的连接结构数量cmd_getget命令请求次数 cmd_setset命令请求次数 cmd_flushflush命令请求次数 get_hitsget命令命中次数 get_missesget命令未命中次数 delete_missesdelete命令未命中次数 delete_hitsdelete命令命中次数 incr_missesincr命令未命中次数incr_hitsincr命令命中次数decr_missesdecr命令未命中次数decr_hitsdecr命令命中次数cas_missescas命令未命中次数cas_hitscas命令命中次数cas_badval使用擦拭次数 auth_cmds认证命令处理的次数 auth_errors认证失败数目 bytes_read读取总字节数 bytes_written发送总字节数 limit_maxbytes分配的内存总大小(字节) accepting_conns服务器是否达到过最大连接(0/1) listen_disabled_num失效的监听数 threads当前线程数 conn_yields连接操作主动放弃数目 bytes当前存储占用的字节数 curr_items当前存储的数据总数 total_items启动以来存储的数据总数 evictionsLRU释放的对象数目reclaimed已过期的数据条目来存储新数据的数目
2.其他命令
stats items显示各个 slab中item数目和存储时长stats slabs显示各个 slab的信息stats sizes显示所有 item的大小和个数flush_all time清理所有的键值对, time指定延迟时间.
3.查找所有的key
telnet 127.0.0.1 11211 stats items # 显示出所有的key , 1 是id值 STAT items:1:number 1 # 通过id获取key stats cachedump 1 0 # id 为1, 0表示列出所有的内容 # 通过上述命令获取到key get key





