memcache简单介绍

官网: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服务器的基本信息,它们的意思是:

参 数 名作 用
pidMemCache服务器的进程id
uptime服务器已经运行的秒数
time服务器当前的UNIX时间戳
versionMemCache版本
pointer_size当前操作系统指针大小,反映了操作系统的位数,64意味着MemCache服务器是64位的
rusage_user进程的累计用户时间
rusage_system进程的累计系统时间
curr_connections当前打开着的连接数
total_connections当服务器启动以后曾经打开过的连接数
connection_structures服务器分配的连接构造数
cmd_getget命令总请求次数
cmd_setset命令总请求次数
cmd_flushflush_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获取到

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值