关于memcache那些事

2023年 7月 15日 44.8k 0

memcached.高性能,高并发的分布式内存对象缓存系统,纯内存的缓存系统,效率极高,memcached主要目的,通过自身内存缓存关系型数据库的查询结果,减少数据库自身被访问的次数,以提高动态web应用的速度,网站架构的并发能力和扩展性

memcached可缓存用户重复的请求的动态内容(如:文字。session等);数据调用,API调用或页面引用结果的直接数据,如字符串,对象等。http://www.memcached.org/

memcached.png1,通常在一个memcached场景中,对于不会经常变动的数据放在memcached中,“数据预热”!也可以做成分类数据静态化文件,并且可以通过web缓存或者CND加速2,热点数据缓存,对于一些更新频繁的数据也会(人为或者预热)写入到memcached

memcached特性:1,memcached通过telnet/nc等命令可直接操作memcached数据,并且memcached协议基于文本格式,和二进制格式2,支持epoll/kqueue异步io模型,使用libevent作为事件处理通知机制3,key/value键值数据类型4,全内存缓存,速度高,速率快,无持久化存储,当冲击则丢失,如果希望数据保留则可以使用redis,或者memecachedb

Memcached是一款开发工具,它既不是一个代码加速器,也不是数据库中间件。其设计哲学思想主要反映在如下方面:

  • 简单key/value存储:服务器不关心数据本身的意义及结构,只要是可序列化数据即可。存储项由“键、过期时间、可选的标志及数据”四个部分组成;
  • 功能的实现一半依赖于客户端,一半基于服务器端:客户负责发送存储项至服务器端、从服务端获取数据以及无法连接至服务器时采用相应的动作;服务端负责接收、存储数据,并负责数据项的超时过期;
  • 各服务器间彼此无视:不在服务器间进行数据同步;
  • O(1)的执行效率
  • 清理超期数据:默认情况下,Memcached是一个LRU缓存,同时,它按事先预订的时长清理超期数据;但事实上,memcached不会删除任何已缓存数据,只是在其过期之后不再为客户所见;而且,memcached也不会真正按期限清理缓存,而仅是当get命令到达时检查其时长;key-value,键值缓存
  • 键值:查找标准和对应值,键hash编码存放,和key的每一个字段的key做比较,比较过程在不出现码冲突,键冲突的情况下,查找时间无论键的hash个数,只要没出现冲突,则时间一样。

    yum安装:yum install libevent libevent-devel nc telnet memcached -y

    [root@NFS-WEB2 ~]# which memcached
    /usr/bin/memcached
    
    [root@NFS-WEB2 ~]# memcached -m 16m -p 11211 -d -uroot -c 8192
    [root@NFS-WEB2 ~]# lsof -i :11211
    COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    memcached 3159 root   26u  IPv4  25986      0t0  TCP *:memcache (LISTEN)
    memcached 3159 root   27u  IPv6  25987      0t0  TCP *:memcache (LISTEN)
    memcached 3159 root   28u  IPv4  25990      0t0  UDP *:memcache 
    memcached 3159 root   29u  IPv6  25991      0t0  UDP *:memcache 
    [root@NFS-WEB2 ~]# 
    

    多实例启动

    [root@NFS-WEB2 ~]# memcached -m 16m -p 11212 -d -uroot -c 8192
    [root@NFS-WEB2 ~]# lsof -i :11212
    COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    memcached 3186 root   26u  IPv4  27205      0t0  TCP *:11212 (LISTEN)
    memcached 3186 root   27u  IPv6  27206      0t0  TCP *:11212 (LISTEN)
    memcached 3186 root   28u  IPv4  27209      0t0  UDP *:11212 
    memcached 3186 root   29u  IPv6  27210      0t0  UDP *:11212 
    [root@NFS-WEB2 ~]# 
    
    

    memcached -h相关参数:存储类命令:set(设置缓存), add(新增), replace(替换), append(在一个缓存后附加新的内容), prepend(在缓存内容之前)获取数据类命令:get(查看), delete(删除), incr/decr统计类命令:stats, stats items, stats slabs, stats sizes清理命令: flush_all

    进程与连接的设置:-d: 守护进程方式允许-u: 指定用户-l: 指定进程监控服务器iP-p: 监控tcp端口号默认11211-P(大写):设置保存的pid文件内存相关:-m:指定memcached服务科缓存的最大内存,默认64M-M: memcached服务内存不够时禁用LRU,如果内存满了会报错-n:为key+value_flags分配的最小内存空间,默认48字节-f :设定Slab Allocator定义预先分配内存空间大小固定的块时使用的增长因子;-L:启用打内存页,可以降低内存消耗, 改进性能并发连接:-c:最大并发连接,默认1024-t: 线程数,默认4,由于memcached采用NIO,线程太多用处不大-R:每个event最大请求数,默认20-C:禁用CAS,可以禁止版本计数,减少开销-S: 启用sasl进行用户认证;调试参数:-v: 打印较少的errors/warnings-vv: 打印非常多调试信息和错误输出到控制台,也打印客户端命令和响应-vvv: 打印极多的调试信息和错误输出,打印内部状态转变

    [root@NFS-WEB2 ~]# telnet 127.0.0.1 11211
    Trying 127.0.0.1...
    Connected to 127.0.0.1.
    Escape character is '^]'.
    

    插入

    set user01 0 0 7 
    linuxea
    STORED
    

    查看

    get user01
    VALUE user01 0 7
    linuxea
    END
    

    删除

    delete user01
    DELETED
    get user01
    END
    

    当有多实例时在使用:

    memcached -m 16m -p 11211 -d -uroot -c 8192 -P /var/run/11211.pid
    

    kill cat /var/run/11211.pid 即可

    查看

    [root@NFS-WEB2 memcache-2.2.7]# memcached -u root -vv
    slab class   1: chunk size        96 perslab   10922
    slab class   2: chunk size       120 perslab    8738
    slab class   3: chunk size       152 perslab    6898
    slab class   4: chunk size       192 perslab    5461
    slab class   5: chunk size       240 perslab    4369
    slab class   6: chunk size       304 perslab    3449
    slab class   7: chunk size       384 perslab    2730
    slab class   8: chunk size       480 perslab    2184
    slab class   9: chunk size       600 perslab    1747
    slab class  10: chunk size       752 perslab    1394
    slab class  11: chunk size       944 perslab    1110
    slab class  12: chunk size      1184 perslab     885
    slab class  13: chunk size      1480 perslab     708
    slab class  14: chunk size      1856 perslab     564
    slab class  15: chunk size      2320 perslab     451
    slab class  16: chunk size      2904 perslab     361
    slab class  17: chunk size      3632 perslab     288
    slab class  18: chunk size      4544 perslab     230
    slab class  19: chunk size      5680 perslab     184
    slab class  20: chunk size      7104 perslab     147
    slab class  21: chunk size      8880 perslab     118
    slab class  22: chunk size     11104 perslab      94
    slab class  23: chunk size     13880 perslab      75
    slab class  24: chunk size     17352 perslab      60
    slab class  25: chunk size     21696 perslab      48
    slab class  26: chunk size     27120 perslab      38
    slab class  27: chunk size     33904 perslab      30
    slab class  28: chunk size     42384 perslab      24
    slab class  29: chunk size     52984 perslab      19
    slab class  30: chunk size     66232 perslab      15
    slab class  31: chunk size     82792 perslab      12
    slab class  32: chunk size    103496 perslab      10
    slab class  33: chunk size    129376 perslab       8
    slab class  34: chunk size    161720 perslab       6
    slab class  35: chunk size    202152 perslab       5
    slab class  36: chunk size    252696 perslab       4
    slab class  37: chunk size    315872 perslab       3
    slab class  38: chunk size    394840 perslab       2
    slab class  39: chunk size    493552 perslab       2
    slab class  40: chunk size    616944 perslab       1
    slab class  41: chunk size    771184 perslab       1
    slab class  42: chunk size   1048576 perslab       1
    <26 server listening (auto-negotiate)
    <27 server listening (auto-negotiate)
    <28 send buffer was 124928, now 268435456
    <29 send buffer was 124928, now 268435456
    <28 server listening (udp)
    <29 server listening (udp)
    <28 server listening (udp)
    <29 server listening (udp)
    <28 server listening (udp)
    <29 server listening (udp)
    <28 server listening (udp)
    <29 server listening (udp)
    

    指定1.1的增长因子

    [root@NFS-WEB2 memcache-2.2.7]# memcached -u root -f 1.1 -vv
    slab class   1: chunk size        96 perslab   10922
    slab class   2: chunk size       112 perslab    9362
    slab class   3: chunk size       128 perslab    8192
    slab class   4: chunk size       144 perslab    7281
    slab class   5: chunk size       160 perslab    6553
    slab class   6: chunk size       176 perslab    5957
    slab class   7: chunk size       200 perslab    5242
    slab class   8: chunk size       224 perslab    4681
    

    php插件

    http://pecl.php.net/package/memcache
    wget http://pecl.php.net/get/memcache-2.2.7.tgz
    tar xf memcache-2.2.7.tgz
    cd memcached-2.2.7
    [root@NFS-WEB2 memcache-2.2.7]# /usr/local/php5.3/bin/phpize 
    Configuring for:
    PHP Api Version:         20090626
    Zend Module Api No:      20090626
    Zend Extension Api No:   220090626
    [root@NFS-WEB2 memcache-2.2.7]# . /configure --enable-memcache --with-php-config=/usr/local/php5.3/bin/php-config
    [root@NFS-WEB2 memcache-2.2.7]#  make
    [root@NFS-WEB2 memcache-2.2.7]# make install
    Installing shared extensions:     /usr/local/php5.3/lib/php/extensions/no-debug-non-zts-20090626/
    

    编辑/usr/local/php/lib/php.ini,在“动态模块”相关的位置添加如下一行来载入memcache扩展:

    [root@NFS-WEB2 memcache-2.2.7]# vim /etc/php.ini
    extension = /usr/local/php5.3/lib/php/extensions/no-debug-non-zts-20090626/memcache.so
    [root@NFS-WEB2 php5.3]# /usr/local/php5.3/sbin/php-fpm 

    memcache-info.png而后对memcached功能进行测试,在网站目录中建立测试页面test.php,添加如下内容:<?php$mem = new Memcache;$mem->connect("127.0.0.1", 11211) or die("Could not connect");

    $version = $mem->getVersion();echo "Server's version: ".$version."<br/>n";

    $mem->set('hellokey', 'Hello World', 0, 600) or die("Failed to save data at the memcached server");echo "Store data in the cache (data will expire in 600 seconds)<br/>n";

    $get_result = $mem->get('hellokey');echo "$get_result is from memcached server."; ?>

    phpMemcachedAdmin

    [root@NFS-WEB2 share]# yum -y install phpMemcachedAdmin
    [root@NFS-WEB2 share]# cp -R phpMemcachedAdmin/ /www/www/pma

    phpmemcachedadmin.png状态参数:curr_items 当前缓存条个数total_items 总的缓存条目total_connections 总的连接数curr_connections 当前的连接数connection_struouures 总的连接个数cmd_get 总的get次数get_hits get命中次数get_misses get未命中次数incr_hits 自动加1命中次数incr_misses 自动加1未命中次数bytes_read 用户发来的字节数bytes_written 总发送客户端响应的字节数limit_maxbytes memcache内存的总的字节大小threads 线程数 evictions 未获取空闲内存删除的items数

    memcache-master[root@NFS-WEB2 www]# unzip memadmin-master.zip 请输入图片描述

    memcachephp请输入图片描述工具下载地址:点我下载

    相关文章

    LeaferJS 1.0 重磅发布:强悍的前端 Canvas 渲染引擎
    10分钟搞定支持通配符的永久有效免费HTTPS证书
    300 多个 Microsoft Excel 快捷方式
    一步步配置基于kubeadmin的kubevip高可用
    istio全链路传递cookie和header灰度
    REST Web 服务版本控制

    发布评论