ddxiami

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2544|回复: 3

[细说PHP] 第22章MemCache管理与应用

[复制链接]
发表于 2013-8-8 16:15:41 | 显示全部楼层 |阅读模式
向memcached服务器中添加和重置数据

<?php
        /* 实例化Memcache类的对象 */
        $memcache = new Memcache;
        /* 连接本机的memcached服务器 */
        $memcache -> connect('localhost', 11211);
       
        /* 向本机的memcached服务器中添加一组数据 */
        $is_add1 = $memcache->add('brophp', 'BroPHP框架');
        /* 向本机添加每一数组作为数据,数组或对象将会被序列化 */
        $is_add2 = $memcache->add('lamp', array('Linux', 'Apache', 'MySQL', 'PHP'));
        /* 如果添加的key已经存在,则添加将会失败 , MEMCACHE_COMPRESSED 使用zlib压缩, 0表示不过期*/
        $is_add3 = $memcache->add('lamp', 'LAMP兄弟连',  MEMCACHE_COMPRESSED, 0);
       
        /*设置一个指定 key 的缓存变量内容, 如果key不存中则新添加,如果存在则为修改 */
        $is_set1 = $memcache->set('phpfw', 'BroPHP框架');
        /* 指定的key已经存在,则修改内容 ,缓存一周*/
        $is_set2 = $memcache->set('brophp', 'BroPHP超经量组框架',MEMCACHE_COMPRESSED, 7*24*60*60);
       
        /* 使用replace()替换一个指定已存在key 的的缓存变量内容 是set()方法的别名 ,设置大于30天的缓存*/
        $is_replace = $memcache->replace('lamp', 'LAMP兄弟连',  MEMCACHE_COMPRESSED, time()+31*24*60*60);
       
        /* 关闭与memcached服务器的连接 */
        $memcache -> close();
       
       
       
       
       
       
回复

使用道具 举报

 楼主| 发表于 2013-8-8 16:18:42 | 显示全部楼层
从memcached服务器中获取和删除数据

<?php
        /* 实例化Memcache类的对象 */
        $memcache = new Memcache;
        /* 连接本机的memcached服务器 */
        $memcache -> connect('localhost', 11211);

        /* 返回缓存的指定 brophp 的变量内容 */
        $var1 = $memcache->get('brophp');
        /*
                如果键brophp,lamp不存在 $var2 = array();
                如果brophp,lamp存在$var = array(‘brophp‘=>‘BroPHP超经量组框架‘, ‘lamp‘=>‘LAMP兄弟连‘);
        */
        $var2 = $memcache->get(array('brophp', 'lamp'));
        
        var_dump($var1);
        var_dump($var2);
        
        /* 关闭与memcached服务器的连接 */
        $memcache -> close();?>


<?php
        /* 实例化Memcache类的对象 */
        $memcache = new Memcache;
        /* 连接本机的memcached服务器 */
        $memcache -> connect('localhost', 11211);

        $memcache -> delete('phpfw');       //立即删除phpfw的项
        $memcache -> delete('brophp', 0);   //立即删除brophp的项
        $memcache -> delete('lamp', 30);    //在30秒内删除lamp的项
        
        /* 关闭与memcached服务器的连接 */
        $memcache -> close();
?>
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-8 16:26:07 | 显示全部楼层
添加分布式使用的多台memcached服务器

<?php
        /* 实例化Memcache类的对象 */
        $memcache = new Memcache;
        /*
        $mem->addServer('192.168.0.11', 11211);   //添加第一个memcached服务器
        $mem->addServer('192.168.0.12', 11211);   //添加第二个memcached服务器
        $mem->addServer('192.168.0.13', 11211);   //添加第三个memcached服务器
        */
        /* 通过配置文件可以动态设置多台memcached服务器的参数 */
        $mem_conf = array(
                array('host'=>'192.168.0.11', 'port'=>'11211'),
                array('host'=>'192.168.0.12', 'port'=>'11211'),
                array('host'=>'192.168.0.13', 'port'=>'11211')
        );

        /* 通过循环按$mem_conf数组中的内容设置多台memcached服务器 */
        foreach ( $mem_conf as $v ) {
                $memcache->addServer ( $v ['host'], $v ['port'] );
        }  

        /*
                使用循环向3台memcached服务器中添加100条数据
                会使用“crc32(key) % current_server_num”哈希算法将 key 平均哈希到3台服务器中
        */
        for($i=0; $i < 100; $i++) {
                $mem->set('key'.$i, md5($i).'This is a memcached test!', 0, 60);
        }
?>
       
<?php
        /* 实例化Memcache类的对象 */
        $memcache = new Memcache;
       
        /* 注意第6个参数值15的作用 */
        $is_add = $memcache->addServer('localhost', 11211, true, 1, 1, 15, true);
       
        /* 向本机的memcached服务器中添加一组数据 */
        $is_set = $memcache->set('brophp', 'BroPHP超经量组框架');
?>
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-8 16:26:37 | 显示全部楼层
MemCache的实例应用

<?php
    /** 该函数用于执行有结果集的SQL语句,并将结果缓存到memcached服务器中
                @param        string        $sql                 有结果集的查询语句SQL
                @param        object        $memcache        Memcache类的对象
                @return        $data                                返回结果集的数据    */
        function select($sql, Memcache $memcache){
                /* md5 SQL命令 作为 memcache的唯一标识符*/
                $key = md5($sql);
                /* 先从memcached服务器中获取数据 */
                $data = $memcache->get($key);
                /* 如果$data为false那么就是没有数据, 那么就需要从数据库中获取 */
                if(!$data) {
                        try{     //很有必要将连接数据库的过程单独处理
                                $pdo = new PDO("mysql:host=localhost;dbname=dbtest", "mysql_user", "mysql_pass");
                        }catch(PDOException $e){
                                die("连接失败:".$e->getMessage());
                        }
                        $stmt = $pdo->prepare($sql);
                        $stmt->execute();
                        /* 从数据库中获取数据,返回二维数组$data */
                        $data = $stmt->fetchAll(PDO::FETCH_ASSOC);
                        /* 这里向memcached服务器写入从数据库中获取的数据*/
                        $memcache -> add($key, $data,  MEMCACHE_COMPRESSED, 0);
                }
                return $data;
        }
       
        $memcache = new Memcache;
        /* 可以使用addServer()方法添加多台memcached服务器 */
        $memcache -> connect('localhost', 11211);  
        /* 第一次运行还没有缓存数据, 会读取一次数据库, 当再次访问程序时, 就直接从memcache获取*/
        $data = select("SELECT * FROM user", $memcache);
        var_dump($data);   //输出数据
?>
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|技术文档库 ( 闽ICP备15017263号-2 )|网站地图

GMT+8, 2025-5-19 00:42 , Processed in 0.035255 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表