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

  • 相关阅读:
    ubuntu 安装FoxitReader福昕阅读器(转载)
    添加中文字库
    操作系统常用调度算法(转载https://www.cnblogs.com/kxdblog/p/4798401.html)
    2802:小游戏利用bfs来实现
    2802:小游戏
    适合使用并行的一种bfs
    (转载)关于usr/bin/ld: cannot find -lxxx问题总结
    gcc5.4报错对‘std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()’未定义的引用
    centos7如何安装gcc5.4
    将含有makefile文件的源码加入Eclipse工程
  • 原文地址:https://www.cnblogs.com/dee0912/p/4853990.html
Copyright © 2020-2023  润新知