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
替换 报错 append
value
后方追加数据报错 prepend
value
前方追加数据报错
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
包括以下信息
pid
memcache
服务器进程IDuptime
服务器已运行秒数 time
服务器当前Unix时间戳 version
memcache
版本pointer_size
操作系统指针大小 rusage_user
进程累计用户时间 rusage_system
进程累计系统时间 curr_connections
当前连接数量 total_connections
Memcached
运行以来连接总数connection_structures
Memcached
分配的连接结构数量cmd_get
get命令请求次数 cmd_set
set命令请求次数 cmd_flush
flush命令请求次数 get_hits
get命令命中次数 get_misses
get命令未命中次数 delete_misses
delete命令未命中次数 delete_hits
delete命令命中次数 incr_misses
incr
命令未命中次数incr_hits
incr
命令命中次数decr_misses
decr
命令未命中次数decr_hits
decr
命令命中次数cas_misses
cas
命令未命中次数cas_hits
cas
命令命中次数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
启动以来存储的数据总数 evictions
LRU
释放的对象数目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