1memcached 原理
Posted A 阿牛哥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1memcached 原理相关的知识,希望对你有一定的参考价值。
memcached
k/v架构:
memcached:存储于内存中、如果memcached服务器崩溃、内存中的数据就没有了
redis:存储于内存中、周期性地将数据同步于辅存中、可以永久性的保存数据、目前大多数都会使用这个
memcached:
特性:
k/v缓存,可序列化数据,存储项,key/value/flag/expire time(TTL存活周期)
功能的实现一半依赖于服务器,一半依赖于客户端
支持分布式缓存,互不通信的分布式集群
O(1)的执行效率
清理过期数据:LRU法则
缓存项过期
缓存空间用尽
缓存系统的种类:
代理式缓存
旁路式缓存
分布式系统主机路由:
取模法
一致性hash算法
Lammp
LNAMMP
在线yum安装
安装:先换为163的源
# cd /etc/yum.repos.d
# mv CentOS-Base.repo CentOS-Base.repo.backup
# wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
# mv CentOS7-Base-163.repo CentOS-Base.repo
# yum clean all
查看memcached信息
[root@kvm11 ~]# yum info memcached
可安装的软件包
名称 :memcached
架构 :x86_64
版本 :1.4.15
发布 :10.el7_3.1
大小 :85 k
源 :base/7/x86_64
简介 : High Performance, Distributed Memory Object Cache
网址 :http://www.memcached.org/
协议 : BSD
描述 : memcached is a high-performance, distributed memory object caching
: system, generic in nature, but intended for use in speeding up dynamic
: web applications by alleviating database load.
安装、启动服务
[root@kvm11 ~]# yum install -y memcached
[root@kvm11 ~]# cat /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64" #单位M
OPTIONS=""
[root@kvm11 ~]# systemctl start memcached.service
协议
在tcp、udp上都运行11211端口
协议格式:
文本协议:
二进制协议:目前还在研发
主程序:memcached
环境配置文件:/etc/sysconfig/memcached
可以使用telnet连接
# telnet 192.168.137.141 11211
Trying 192.168.137.141...
Connected to 192.168.137.141.
Escape character is '^]'.
命令:
统计类:stats、stats items、stats slabs、stats sizes
存储类:set / add / replace / append / prepend
set mykey 0 60 11
#mykey 缓存项名字 0 默认 60 缓存时长s 11 字符数
hello world
#带上空格,长度必须和上行定义的一致 不然会报错 CLIENT_ERROR bad data chunk
#第一行是指令前段,第二行是value值
append mykey 0 56 4
#在缓存项存在的时间内、可以增加时长和增加字符长度
.com
# 为增加的字符,必须和上行定义的长度一致
STORED
#成功执行
获取数据类:get / delete / incr 增加 / decr 相减
get mykey #获取缓存项
delete mykey #删除缓存项
set num 0 300 1
0 #value值为数字的时候
STORED
incr num 2 #可以使用incr来增加
2
get num
VALUE num 0 1
2
清空:flush_all 惰性删除,就是把TTL设置为0,等缓存空间不足的时候在清除items
stats 查询的信息
STAT pid 1162 : memcache服务器进程ID
STAT uptime 5022 :服务器已运行秒数
STAT time 1415208270 :服务器当前Unix时间戳
STAT version 1.4.14 :memcache版本
STAT libevent 2.0.19-stable
STAT pointer_size 64 :操作系统指针大小
STAT rusage_user 0.096006 :进程累计用户时间
STAT rusage_system 0.152009 :进程累计系统时间
STAT curr_connections 5 :当前连接数量
STAT total_connections 6 :Memcached运行以来连接总数
STAT connection_structures 6 :Memcached分配的连接结构数量
STAT reserved_fds 20
STAT cmd_get 6 :get命令请求次数
STAT cmd_set 4 :set命令请求次数
STAT cmd_flush 0 :flush命令请求次数
STAT cmd_touch 0
STAT get_hits 4 :get命令命中次数
STAT get_misses 2 :get命令未命中次数
STAT delete_misses 1 :delete命令未命中次数
STAT delete_hits 1 :delete命令命中次数
STAT incr_misses 2 :incr命令未命中次数
STAT incr_hits 1 :incr命令命中次数
STAT decr_misses 0 :decr命令未命中次数
STAT decr_hits 1 :decr命令命中次数
STAT cas_misses 0 :cas命令未命中次数
STAT cas_hits 0 :cas命令命中次数
STAT cas_badval 0 :使用擦拭次数
STAT touch_hits 0
STAT touch_misses 0
STAT auth_cmds 0 :认证命令处理的次数
STAT auth_errors 0 :认证失败数目
STAT bytes_read 262 :读取总字节数
STAT bytes_written 313 :发送总字节数
STAT limit_maxbytes 67108864 :分配的内存总大小(字节)
STAT accepting_conns 1 :服务器是否达到过最大连接(0/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 expired_unfetched 1
STAT evicted_unfetched 0
STAT bytes 142 :当前存储占用的字节数
STAT curr_items 2 :当前存储的数据总数
STAT total_items 6 :启动以来存储的数据总数
STAT evictions 0 :LRU释放的对象数目
STAT reclaimed 1 :已过期的数据条目来存储新数据的数目
END
memcached程序常用的选项:
-l <ip_addr>:监听的地址
-m <num>:缓存空间的大小,默认为64
-u : 用户名
-c <num>:最大并发连接数,默认为1024
-p <num>
Listen on TCP port <num>, the default is port 11211.
-U <num>
Listen on UDP port <num>, the default is port 11211, 0 is off.
-M Disable automatic removal of items from the cache when out of memory. Additions will not be possible until adequate space is freed up.
缓存空间耗尽时,向请求者返回错误信息,而不是基于LRU算法进行缓存清理
-f <factor>:growth factor 增长因子 默认为1.25
# memcached -u memcached -f 2 -vv #设置增长因子为2 -vv 显示
slab class 1: chunk size 96 perslab 10922 #第一行 开始是96字节
slab class 2: chunk size 192 perslab 5461 #96*2=192
#标识为2的slab class ,一共还有5461个字符数为192的chunk
-t <threads>:处理用于请求的线程数
memcached默认没有认证机制,但是可以借助于SASL进行认证
-S Turn on SASL authentication. This option is only meaningful if memcached was compiled with SASL support enabled.
php连接memcached服务的模块:
memcache:php-pecl-memcache
memcached:php-pecl-memcached 163的源没有这个包、 memcached 只支持linux系统,windows里面没有。
# yum list all | grep memcache
php-pecl-memcache.x86_64 3.0.8-4.el7 base
[root@kvm11 ~]#
# yum install -y libmemcached #可提供工具的程序包
# memstat --help #命令工具
# memstat --servers=127.0.0.1 #memcached服务器的ip,注意防火墙
Server: 127.0.0.1 (11211)
pid: 2845
uptime: 11051
time: 1546582232
version: 1.4.15
以上是关于1memcached 原理的主要内容,如果未能解决你的问题,请参考以下文章