• Memcached缓存介绍


    Memcached是什么?

        是一个开源的,高性能,高并发的分布式缓存系统(存内存的缓存系统)

    软件名称:Memcached-1.4.24.tar.gz

    客户端名称:Memcache-2.25.tar.gz

    Memcached的作用:

        通过自身内存中缓存关系型数据库的查询结果,减少数据库自身被访问的次数,以提高动态web应用的速度,提高网站架构的并发能力和扩展性

                  1:电商的商品分类功能不会经常变动,可以实现放入memcache里,然后在对外进行数据访问,这个叫“数据预热”

                  2:作为集群sesson会话共享存储

    特性

    1.     协议简单,采用文本的协议,telnet/nc等命令就能操作memcached
    2.               支持epoll/kqueue异步I/O模型,使用libevent作为事件处理机制
    3.     key/value键值数据类型
    4.     全内存缓存,效率高
    5.              支持分布式集群(通过一致性hash算法)

    安装:

    #检查是否安装

    rpm -qa libevent libevent-devel nc telnet

    #安装管理工具及依赖

    yum install libevent libevent-devel nc telnet -y

    #安装memcache

    yum install memcached -y

    #查看路径

    which memcached
    /usr/bin/memcached

    #启动

    memcached -m 16m -p 11211 -d -u root -c 8192

    #常用参数

    -m:使用多大内存(默认64,最大1024)      -l    监听地址                                                                            

    -p:端口(默认11211)               -P  PID保存的文件

    -d:后台运行                               -M   内存不够时禁止LRU(清除数据),满了报错

    -u :用户                                     -n   key+value+flags分配的最小内存空间,默认48字节

    -c:并发连接数(默认1024)     -f      chunk size增长因子,默认1.25

    #查看端口            

    lsof -i:11211
    COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
    memcached 2201 root 26u IPv4 12720 0t0 TCP *:memcache (LISTEN)
    memcached 2201 root 27u IPv6 12721 0t0 TCP *:memcache (LISTEN)
    memcached 2201 root 28u IPv4 12724 0t0 UDP *:memcache
    memcached 2201 root 29u IPv6 12725 0t0 UDP *:memcache

    #启用多实例(增加一个端口就行了)

    memcached -m 16m -p 11212 -d -u root -c 8192

    #语法

    set              key1      0           0                                                 6

    command   key       flags     exptime(过期时间,0不过期)     写入内容value大小字节数

    插入  set

    查询 get

    删除  delete

    更新替换  replace(数据存在才会替换)

    #进入memcache

    telnet 127.0.0.1 11211

    #写入  取出   删除   数据

    set user01 0 0 7   #7字符要与下面存的内容相同
    daxian1                #7个字符
    STORED             #成功
    get user01           #通过key 取出数值
    VALUE user01 0 7   #取出
    daxian1                  #显示

    delete user01    #删除

    quit   #退出

    #nc的用法

    printf "set key1 0 0 6 daxian "|nc 127.0.0.1 11211

    #取值

    printf "get key1 "|nc 127.0.0.1 11211
    VALUE key1 0 6
    daxian
    END

    #删除

    printf "delete key1 "|nc 127.0.0.1 11211

    ==============================实战=======================

    准备好lnmp环境

    至少能出现phpinfo

     下载PHP扩展插件memcache插件

    http://pecl.php.net/package/memcache

    cd /home/daxian/tools/

    wget http://pecl.php.net/get/memcache-2.2.7.tgz

    tar xf memcache-2.2.7.tgz

     cd memcache-2.2.7

    /application/php/bin/phpize 

    ./configure --enable-memcache --with-php-config=/application/php/bin/php-config

    make  && make install

    Installing shared extensions:     /application/php5.5.32/lib/php/extensions/no-debug-non-zts-20121212/

    vim /application/php/lib/php.ini

    结尾添加

    extension = memcache.so

    重启php

    #检查php语法

    /application/php/sbin/php-fpm -t
    [02-Apr-2018 10:19:50] NOTICE: configuration file /application/php5.5.32/etc/php-fpm.conf test is successful

    pkill php

    /application/php/sbin/php-fpm

    刷新phpinfo  就能看见了

    可以测试了

     vim /application/nginx/html/blog/mem_test.php

    <?php
    $memcache = new Memcache;
    $memcache->connect('192.168.70.121', 11211) or die ("Could not connect Mc server");
    $memcache->set('key','daxian hello');
    $get= $memcache->get('key');
    echo $get;
    ?>

    访问

    http://blog.daxian.com/mem_test.php

    web就可以访问memcahce

    memcache服务器也能查询到

    [root@memcache ~]# printf "get key "|nc 127.0.0.1 11211
    VALUE key 0 12
    daxian hello
    END

    ====================memcache内存管理======================

     slab内存管理机制(默认1M)

    slab 动态创建实际内存区,分配给slab的内存空间,默认是1m,分配给slab之后根据slab的大小切分成chunk,默认48字节,大于1M会忽略

    chunk  数据区块,固定大小 初始化48字节,

      

    为了避免内存的浪费,预先计算出应用存入得数据大小,或吧同一个业务的数据类型存入到一个memcached服务器中

    或者 在启动memecache时,指定“-f”参数,在一定程度上控制内存之间的大小差异

    -f 默认值(1.25)

    解决办法:规划slab大小=chunk大小*n整数倍

    调整chunk大小

     memcached -f 2 -vvv -u root

    slab class 1: chunk size 96 perslab 10922
    slab class 2: chunk size 192 perslab 5461
    slab class 3: chunk size 384 perslab 2730
    slab class 4: chunk size 768 perslab 1365
    slab class 5: chunk size 1536 perslab 682
    slab class 6: chunk size 3072 perslab 341
    slab class 7: chunk size 6144 perslab 170
    slab class 8: chunk size 12288 perslab 85
    slab class 9: chunk size 24576 perslab 42
    slab class 10: chunk size 49152 perslab 21
    slab class 11: chunk size 98304 perslab 10
    slab class 12: chunk size 196608 perslab 5
    slab class 13: chunk size 393216 perslab 2
    slab class 14: chunk size 1048576 perslab 1

    调整成1.25

    memcached -f 1.25 -vvv -u root
    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

     chunk size        96 perslab   10922

    算法  96  * 10922

    echo 96 * 10922/1024|bc

    都是接近1M

    ==========================状态================

    telnet 192.168.70.121 11211

    stats

    STAT pid 2201                             #pid
    STAT uptime 242312                  #服务已运行描述
    STAT time 1522640902            #服务当前时间
    STAT version 1.4.4                  #版本号
    STAT pointer_size 64               #操作系统指针大小
    STAT rusage_user 5.462169      #进程累积用户
    STAT rusage_system 4.229357   #进程累积系统时间
    STAT curr_connections 10         #当前连接数
    STAT total_connections 18        #总的连接
    STAT connection_structures 11    #分配的连接结构树
    STAT cmd_get 5                         #get请求数
    STAT cmd_set 3                         #set请求数
    STAT cmd_flush 0                      #flush请求数
    STAT get_hits 4                #命中
    STAT get_misses 1         #命中miss       百分比  命中/命中+miss

    STAT delete_misses 1        #  delete未命中数
    STAT delete_hits 2            #delete 命中次数
    STAT incr_misses 0         #incr未命中数
    STAT incr_hits 0              # incr命中数

    STAT decr_misses 0  
    STAT decr_hits 0
    STAT cas_misses 0
    STAT cas_hits 0
    STAT cas_badval 0
    STAT auth_cmds 0                        #认证命令处理次数
    STAT auth_errors 0                    #认证失败处理次数
    STAT bytes_read 232                 #读取总次数
    STAT bytes_written 238               #发送总字节数
    STAT limit_maxbytes 16777216    #分配的内存总大小
    STAT accepting_conns 1                  #接收新的连接
    STAT listen_disabled_num 0   #失效监听数
    STAT threads 4                    #当前线程数
    STAT conn_yields 0           #连接操作主动放弃数目
    STAT bytes 81                    #已经过期但未获取的对象数目
    STAT curr_items 1              #已驱逐但未获取的对象数目
    STAT total_items 3           #当前存储占用的字节数
    STAT evictions 0             #LRU释放的对象数

    stats        memcache各种信息

    stats settings          查看设置信息,例如线程数

    stat slabs               查看slabs相关状况,chunksize长度

    stats items              查看items相关情况

    stats  sizes            查看item个数和大小

    stats  reset        清理统计数

    或者使用memadmin,第三方php写的,连接memcache

    wget http://www.junopen.com/memadmin/memadmin-1.0.12.tar.gz

    解压缩复制到 站点目录下即可

     cp memadmin /application/nginx/html/blog/ 

    访问网站即可 

     用户名密码admin

     

    ============================memcache 会话共享====================

    修改php.ini  中session的类型和路径

    session.save_handler = memcache

    session.save_path = "tcp:/192.168.70.121:11211"

    重启PHP

    可以找一个bbs 搭建测试一下

  • 相关阅读:
    Java线程基础(二)
    Java线程基础(一)
    泛型集合List的详细用法
    Java中日期格式(String、Date、Calendar)的相互转换
    重写Java中包装类的方法
    Java的集合框架(第一次小结)
    node.js 调用mysql 数据库
    win10 系统解决mysql中文乱码问题
    vue-echarts图表
    文件上传的几个例子
  • 原文地址:https://www.cnblogs.com/sky00747/p/8677526.html
Copyright © 2020-2023  润新知