Sian 发表于 2016-1-16 17:57:05

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

本帖最后由 Sian 于 2016-1-16 18:02 编辑

1、通过PDO进行数据库连接及相关操作;
2、使用memcache缓存数据库查询的结果来应对高并发的服务器访问;
3、具体实现已在代码中写明注释;
4、什么是memcache及为什么要使用memcache本帖中不做详细解释;
<?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();
      }执行结果:
5、第一次执行时会出现一行“Memcache中存入结果数据!”的文字;
6、再次刷新时该文字消失,说明此时的结果来自服务器的memcache缓存;
7、10秒后再次刷新,上述文字会再次出现,表明memcache缓存已释放,再次从数据库查询获取结果;
8、再次刷新又消失,10秒钟内只查询一次结果,并且10秒更新一次数据,大大提高了服务器的访问性能;
9、10秒是如何得来的?看上面的注释...
页: [1]
查看完整版本: PDO及memcache(内存缓存)的一个实例