zoukankan      html  css  js  c++  java
  • Memcached 笔记与总结(4)memcache 扩展的使用

    在 wamp 环境下进行测试:WAMPSERVER 2.2(Windows 7 + Apache 2.2.21 + PHP 5.3.10 + memcache 3.0.8 + Memcached 1.4.24)

    在本地开启 Memcached 服务:

    简单例子:

    <?php
    //创建Memcache对象
    $mc = new Memcache();
    //连接Memcached服务器
    $mc->connect('127.0.0.1', 11211);
    //存储数据
    $mc->set('name', 'dee', 0, 20);//0:不适用zLib压缩 20:缓存20秒
    //获取数据
    $name = $mc->get('name');
    var_dump($name);

    输出:

    使用 telnet 客户端连接 Memcached 服务器,获取缓存数据:

    20 秒后获取不到 key 为 name 的值。

    简单例子2:

    <?php
    //创建Memcache对象
    $mc = new Memcache();
    //连接Memcached服务器
    $mc->connect('127.0.0.1', 11211);
    //存储数据
    $mc->set('name', 'dee', 0, 20);//0:不适用zLib压缩 20:缓存20秒
    //获取数据
    $name = $mc->get('name');
    var_dump($name);
    
    //删除数据
    $mc->delete('name');
    $name = $mc->get('name');
    var_dump($name);
    
    //强制刷新全部缓存,即清空Memcached服务器
    $mc->flush();
    
    //断开与Memcached服务器的连接
    $mc->close();

    输出:

    简单例子3:

    Memcache::getStats 获取服务器的统计信息,返回一个关联数组形式的服务器统计信息,值是统计信息的值,可以使用:reset,malloc,maps,cachedump,slabs,items,sizes,例:

    <?php
    //创建Memcache对象
    $mc = new Memcache();
    //连接Memcached服务器
    $mc->connect('127.0.0.1', 11211);
    //获取服务器的统计信息
    $serverStats = $mc->getStats('slabs');
    var_dump($serverStats);

    输出:

    Memcached 在存储数据时使用 Slab 内存分配算法,这种算法可以减少生成内存碎片,提高内存使用率。

    又如:

    <?php
    //创建Memcache对象
    $mc = new Memcache();
    //连接Memcached服务器
    $mc->connect('127.0.0.1', 11211);
    //获取服务器的统计信息
    $serverStats = $mc->getStats('items');
    var_dump($serverStats);

    输出:

    又如:

    <?php
    //创建Memcache对象
    $mc = new Memcache();
    //连接Memcached服务器
    $mc->connect('127.0.0.1', 11211);
    //获取服务器的统计信息
    $serverStats = $mc->getStats('sizes');
    var_dump($serverStats);

    输出:

    简单例子4:

    Memcache::getServerStatus,获取一个服务器的在线(1) / 离线状态(0)

    <?php
    //创建Memcache对象
    $mc = new Memcache();
    //连接Memcached服务器
    $mc->connect('127.0.0.1', 11211);
    //获取服务器的统计信息
    $serverStatus = $mc->getServerStatus('127.0.0.1', 11211);
    var_dump($serverStatus);

    输出:int 1

    说明:第一个参数是服务器域名或 IP ,第二个参数是端口,默认 11211

    简单例子5:

    通过把从数据库查询的结果保存到 Memcached 中,下次访问直接从 Memcached 中获取,从而减轻数据库的负担 

    <?php
    //创建Memcache对象
    $mc = new Memcache();
    //连接Memcached服务器
    $mc->connect('127.0.0.1', 11211);
    
    $id = (int)$_GET['id'];
    $sql = 'select * from message where id = '.$id;
    $key = md5($sql);
    //判断数据库查询结果是否已经缓存到Memcached服务器中
    $datas = $mc->get($key);
    if(!$datas) {
        //没有获取到缓存数据,则直接从MySQL中查询
        $conn = mysql_connect('127.0.0.1', 'root', '');
        mysql_select_db('msg');
        $result = mysql_query($sql);
        while($row = mysql_fetch_object($result)){
            $datas[] = $row;
        }
        //将结果集保存到Memcached中
        $mc->set($key, $datas);
    }
    var_dump($datas);

    输出:

    说明:通过 md5() 把要查询的 SQL 语句加密成一个唯一的 key,使用该 key 去 Memcached 中查询,如果已经有该缓存,则直接返回,如果没有,则去 MySQL 数据库中查询后返回结果并缓存到 Memcached 服务器中。

    在 telnet 客户端中列出所有的 key:

    #列出所有的 keys
    stats items   //这条是命令
    STAT items:4:number 1
    STAT items:4:age 347
    STAT items:4:evicted 0
    STAT items:4:evicted_nonzero 0
    STAT items:4:evicted_time 0
    STAT items:4:outofmemory 0
    STAT items:4:tailrepairs 0
    STAT items:4:reclaimed 0
    STAT items:4:expired_unfetched 0
    STAT items:4:evicted_unfetched 0
    STAT items:4:crawler_reclaimed 0
    STAT items:4:crawler_items_checked 0
    STAT items:4:lrutail_reflocked 0
    END
    
    #通过 item id 获取 key,本例中是 4
    #第 2 个参数为列出的长度, 0 代表全部列出
    stats cachedump 4 0 //这条是命令
    ITEM 378adbfe4fe7b6a2bbcad92d670db3c9 [91 b; 1443880812 s]
    END
    
    #通过 get 获取 key 值
    get 378adbfe4fe7b6a2bbcad92d670db3c9 //这条是命令
    VALUE 378adbfe4fe7b6a2bbcad92d670db3c9 1 91
    a:1:{i:0;O:8:"stdClass":3:{s:2:"id";s:1:"1";s:7:"content";s:5:"hello";s:4:"flag";s:1:"3";}}
    END

    如图所示,PHP 的 memcache 扩展会自动进行 serialize 和 unserialize ,因此可以直接存储数组或者对象。

    参考:《Memcache 查看列出所有key方法

  • 相关阅读:
    Java Output流写入包装问题
    SpringBoot项目单元测试不经过过滤器问题
    SpringSecurity集成启动报 In the composition of all global method configuration, no annotation support was actually activated 异常
    JWT jti和kid属性的说明
    Maven 排除依赖
    第五章 基因概念的发现
    第三章 孟德尔遗传的拓展
    第二章 孟德尔遗传
    第一章 引言
    GWAS全基因组关联分析
  • 原文地址:https://www.cnblogs.com/dee0912/p/4853990.html
Copyright © 2011-2022 走看看