官网:http://memcached.org/
rpm下载地址:http://rpmfind.net/linux/centos/7.9.2009/os/x86_64/Packages/memcached-1.4.15-10.el7_3.1.x86_64.rpm
##依赖:http://rpmfind.net/linux/centos/7.9.2009/os/x86_64/Packages/libmemcached-1.0.16-5.el7.x86_64.rpm
文章参考原文:
https://www.cnblogs.com/xrq730/p/4948707.html
https://zhuanlan.zhihu.com/p/164378671
一 memcache 介绍
①、Memcache简介
Memcache是http://danga.com的一个项目,最早是为 LiveJournal 服务的,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力。它可以应对任意多个连接,使用非阻塞的网络IO。由于它的工作机制是在内存中开辟一块空间,然后建立一个HashTable,Memcached管理这些HashTable,所以速度非常快。
②、Memcache和memcached的区别
为什么会有Memcache和memcached两种名称?其实Memcache是这个项目的名称,而memcached是它服务器端的主程序文件名,知道我的意思了把~~~~。一个是项目名称,一个是主程序文件名,在网上看到了很多人不明白,于是混用了。
③、Memcache的服务器端和客户端安装
分为两个过程:memcache服务器端的安装和memcached客户端的安装。
所谓服务器端的安装就是在服务器(一般都是linux系统)上安装Memcache实现数据的存储。
所谓客户端的安装就是指php(或者其他程序,Memcache还有其他不错的api接口提供)去使用服务器端的Memcache提供的函数,需要php添加扩展。
④、PHP的Memcache客户端所有方法总结
memcache函数所有的方法列表如下:
Memcache::add – 添加一个值,如果已经存在,则返回false
Memcache::addServer – 添加一个可供使用的服务器地址
Memcache::close – 关闭一个Memcache对象
Memcache::connect – 创建一个Memcache对象
memcache_debug – 控制调试功能
Memcache::decrement – 对保存的某个key中的值进行减法操作
Memcache::delete – 删除一个key值
Memcache::flush – 清除所有缓存的数据
Memcache::get – 获取一个key值
Memcache::getExtendedStats – 获取进程池中所有进程的运行系统统计
Memcache::getServerStatus – 获取运行服务器的参数
Memcache::getStats – 返回服务器的一些运行统计信息
Memcache::getVersion – 返回运行的Memcache的版本信息
Memcache::increment – 对保存的某个key中的值进行加法操作
Memcache::pconnect – 创建一个Memcache的持久连接对象
Memcache::replace -对一个已有的key进行覆写操作
Memcache::set – 添加一个值,如果已经存在,则覆写
Memcache::setCompressThreshold – 对大于某一大小的数据进行压缩
Memcache::setServerParams – 在运行时修改服务器的参数
二 安装memcache单节点
[root@node-1 tmp]# yum install libmemcached-1.0.16-5.el7.x86_64.rpm memcached-1.4.15-10.el7_3.1.x86_64.rpm
[root@node-1 tmp]# cat /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS=""
#示例
#OPTIONS="-U 0 -l 127.0.0.1"
[root@node-1 tmp]# systemctl start memcached
[root@node-1 tmp]# systemctl enable memcached
Created symlink from /etc/systemd/system/multi-user.target.wants/memcached.service to /usr/lib/systemd/system/memcached.service.
[root@node-1 tmp]# netstat -lnpt | grep memcache
tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN 2890/memcached
tcp6 0 0 :::11211 :::* LISTEN 2890/memcached
三 MemCache指令(命令)汇总
上面说过,已知MemCache的某个节点,直接telnet过去,就可以使用各种命令操作MemCache了,下面看下MemCache有哪几种命令:
命 令 | 作 用 |
---|---|
get | 返回Key对应的Value值 |
add | 添加一个Key值,没有则添加成功并提示STORED,有则失败并提示NOT_STORED |
set | 无条件地设置一个Key值,没有就增加,有就覆盖,操作成功提示STORED |
replace | 按照相应的Key值替换数据,如果Key值不存在则会操作失败 |
stats | 返回MemCache通用统计信息(下面有详细解读) |
stats items | 返回各个slab中item的数目和最老的item的年龄(最后一次访问距离现在的秒数) |
stats slabs | 返回MemCache运行期间创建的每个slab的信息(下面有详细解读) |
version | 返回当前MemCache版本号 |
flush_all | 清空所有键值,但不会删除items,所以此时MemCache依旧占用内存 |
quit | 关闭连接 |
四 简单操作以及参数解析
[root@node-1 ~]# telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
set key 32 0 10
hellowrkd
CLIENT_ERROR bad data chunk
ERROR
set key 32 0 10 设置 0 缓存时间,字符限制
helloworld
STORED
get key
VALUE key 32 10
helloworld
END
flush_all
OK
get key
END
stats
STAT pid 2890
STAT uptime 2677
STAT time 1642147242
STAT version 1.4.15
STAT libevent 2.0.21-stable
STAT pointer_size 64
STAT rusage_user 0.263528
STAT rusage_system 0.685173
STAT curr_connections 12
STAT total_connections 164
STAT connection_structures 23
STAT reserved_fds 20
STAT cmd_get 2
STAT cmd_set 2
STAT cmd_flush 1
STAT cmd_touch 0
STAT get_hits 1
STAT get_misses 1
STAT delete_misses 0
STAT delete_hits 0
STAT incr_misses 0
STAT incr_hits 0
STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT touch_hits 0
STAT touch_misses 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 7598
STAT bytes_written 260695
STAT limit_maxbytes 67108864
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT hash_power_level 16
STAT hash_bytes 524288
STAT hash_is_expanding 0
STAT bytes 0
STAT curr_items 0
STAT total_items 1
STAT expired_unfetched 0
STAT evicted_unfetched 0
STAT evictions 0
STAT reclaimed 0
END
这些参数反映着MemCache服务器的基本信息,它们的意思是:
参 数 名 | 作 用 |
---|---|
pid | MemCache服务器的进程id |
uptime | 服务器已经运行的秒数 |
time | 服务器当前的UNIX时间戳 |
version | MemCache版本 |
pointer_size | 当前操作系统指针大小,反映了操作系统的位数,64意味着MemCache服务器是64位的 |
rusage_user | 进程的累计用户时间 |
rusage_system | 进程的累计系统时间 |
curr_connections | 当前打开着的连接数 |
total_connections | 当服务器启动以后曾经打开过的连接数 |
connection_structures | 服务器分配的连接构造数 |
cmd_get | get命令总请求次数 |
cmd_set | set命令总请求次数 |
cmd_flush | flush_all命令总请求次数 |
get_hits | 总命中次数,重要,缓存最重要的参数就是缓存命中率,以get_hits / (get_hits + get_misses)表示,比如这个缓存命中率就是99.2% |
get_misses | 总未命中次数 |
auth_cmds | 认证命令的处理次数 |
auth_errors | 认证失败的处理次数 |
bytes_read | 总读取的字节数 |
bytes_written | 总发送的字节数 |
limit_maxbytes | 分配给MemCache的内存大小(单位为字节) |
accepting_conns | 是否已经达到连接的最大值,1表示达到,0表示未达到 |
listen_disabled_num | 统计当前服务器连接数曾经达到最大连接的次数,这个次数应该为0或者接近于0,如果这个数字不断增长, 就要小心我们的服务了 |
threads | 当前MemCache总线程数,由于MemCache的线程是基于事件驱动机制的,因此不会一个线程对应一个用户请求 |
bytes | 当前服务器存储的items总字节数 |
current_items | 当前服务器存储的items总数量 |
total_items | 自服务器启动以后存储的items总数量 |
五 Memcached数据导入与导出
memcached导出数据:
[root@linux ~]# memcached-tool 127.0.0.1:11211 dump > data.bak
查看导出的数据:
[root@linux ~]# cat data.bak
add test 0 1575893722 5
abcde
add key_1 0 1575893722 3
123
add key_2 0 1575893722 8
qwertyui
memcached导入数据:
[root@linux ~]# nc 127.0.0.1 11211 < data.bak
STORED
STORED
STORED
#如果提示nc命令不存在,则安装:yum -y install nc
注意:
1.导出的语句为add,所以导入时,需要删除已经存在的key或重启memcached(重启后所有数据都会消失),否则会显示NOT_STORED
2.导出的数据会带时间截,如果导入时,该时间截对应的数据有效期已过,那么该数据无法get获取到
3.如果数据过期时间设置为0永不过期(不重启memcached服务的前提下,服务重启后,所有数据都会过期),那么导出时带的时间截为key创建时间,重新导入时也会过期,无法get获取到