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/memcachedPORT="11211"USER="memcached"MAXCONN="1024"CACHESIZE="64"   #单位MOPTIONS=""[root@kvm11 ~]# systemctl start memcached.service


协议

在tcp、udp上都运行11211端口

协议格式:

文本协议:

二进制协议:目前还在研发

主程序:memcached

环境配置文件:/etc/sysconfig/memcached

可以使用telnet连接

# telnet 192.168.137.141 11211Trying 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服务器进程IDSTAT uptime 5022 :服务器已运行秒数STAT time 1415208270 :服务器当前Unix时间戳STAT version 1.4.14 :memcache版本STAT libevent 2.0.19-stableSTAT 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 20STAT cmd_get 6   :get命令请求次数STAT cmd_set 4   :set命令请求次数STAT cmd_flush 0   :flush命令请求次数STAT cmd_touch 0STAT 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 0STAT touch_misses 0STAT 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 16STAT hash_bytes 524288STAT hash_is_expanding 0STAT expired_unfetched 1STAT evicted_unfetched 0STAT 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-memcachememcached:php-pecl-memcached    163的源没有这个包、 memcached 只支持linux系统,windows里面没有。
# yum list all | grep memcachephp-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: 2845uptime: 11051time: 1546582232version: 1.4.15




以上是关于1memcached 原理的主要内容,如果未能解决你的问题,请参考以下文章

nginx+php+memcached

数据库系统原理 片段翻译

标签菜单android - 不正确的调用片段

如何在不单击的情况下显示片段

二级域名原理以及程序代码

深入理解PHP原理之Opcodes