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方法

  • 相关阅读:
    鹅厂女专家:用“爱折腾”实现跨界之美
    基于腾讯云的视频聊天研究
    iOS微信内存监控
    2017年数据库技术盘点
    如何做好游戏内实时语音体验
    腾讯云微计算实践:从Serverless说起,谈谈边缘计算的未来
    使用腾讯云“自定义监控”监控GPU使用率
    如何在Python中从零开始实现随机森林
    DataGridView 设置某个列为只能为数字
    Ieditor
  • 原文地址:https://www.cnblogs.com/dee0912/p/4853990.html
Copyright © 2011-2022 走看看