年年有"余"

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2237|回复: 0

PDO及memcache(内存缓存)的一个实例

[复制链接]
  • TA的每日心情

    2024-10-15 10:05
  • 签到天数: 372 天

    [LV.9]以坛为家II

    发表于 2016-1-16 17:57:05 | 显示全部楼层 |阅读模式
    本帖最后由 Sian 于 2016-1-16 18:02 编辑

    1、通过PDO进行数据库连接及相关操作;
    2、使用memcache缓存数据库查询的结果来应对高并发的服务器访问;
    3、具体实现已在代码中写明注释;
    4、什么是memcache及为什么要使用memcache本帖中不做详细解释;
    [PHP] 纯文本查看 复制代码
    <?php
            try{                
                    // 修改对应的数据库密码
                    $pdo = new PDO("mysql:host=localhost;dbname=bookstore", "root", "******");
            }catch(PDOException $e){
                    echo $e->getMessage();
            }
            // 执行sql语句查询
            try{
                    // 创建memcache对象,连接本地memcache服务
                    $mem = new Memcache();
                    $mem->addServer("localhost", 11211);
                    // 创建sql语句并以sql语句的md5序列做为存储对应结果的key;
                    $sql = "select id, bookname, publisher, author, price from books";
                    // 以该key去memcache中获取结果,如果为空则去数据库中查询,否则直接使用缓存结果
                    $result = $mem->get(md5($sql));
                    if(empty($result)){
                            // 1、预编译sql语句
                            $statement = $pdo->prepare($sql);
                            // 2、传参执行sql语句(这里没有参数需要传)
                            if(!$statement->execute()) die("数据为空!");
                            // 3、获取执行结果集
                            $result = $statement->fetchAll(PDO::FETCH_ASSOC);
                            // 4、将结果以压缩的形式存入memcache,10秒内有效
                            $mem->set(md5($sql), $result, MEMCACHE_COMPRESSED, 10);
                            // 如果进行了数据库查询则会看到这句输出,否则没有,以此检验memcache是否发挥作用
                            echo "Memcache中存入结果数据!<br/>";
                    }
                    
                    // 结果输出
                    echo '<table border = "1" width = "60%" align = "center">';
                    echo "<caption><h2>查询结果</h2></caption>";
                    echo "<tr><th>序号</th><th>书名</th><th>出版社</th><th>作者</th><th>价格</th></tr>";
                    foreach($result as $row){
                            echo '<tr align = "center">';
                            echo "<td>{$row['id']}</td>";
                            echo "<td>{$row['bookname']}</td>";
                            echo "<td>{$row['publisher']}</td>";
                            echo "<td>{$row['author']}</td>";
                            echo "<td>{$row['price']}</td>";
                            echo "</tr>";
                    }
                    $mem->close();
            }catch(PDOException $e){
                    echo $e->getMessage();
            }
    执行结果: 屏幕快照 2016-01-16 下午5.58.27.png
    5、第一次执行时会出现一行“Memcache中存入结果数据!”的文字;
    6、再次刷新时该文字消失,说明此时的结果来自服务器的memcache缓存;
    7、10秒后再次刷新,上述文字会再次出现,表明memcache缓存已释放,再次从数据库查询获取结果;
    8、再次刷新又消失,10秒钟内只查询一次结果,并且10秒更新一次数据,大大提高了服务器的访问性能;
    9、10秒是如何得来的?看上面的注释...
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    手机版|小黑屋|Archiver|iOS开发笔记 ( 湘ICP备14010846号 )

    GMT+8, 2024-12-5 03:08 , Processed in 0.049399 second(s), 21 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

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