本帖最后由 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();
} 执行结果:
5、第一次执行时会出现一行“Memcache中存入结果数据!”的文字;
6、再次刷新时该文字消失,说明此时的结果来自服务器的memcache缓存;
7、10秒后再次刷新,上述文字会再次出现,表明memcache缓存已释放,再次从数据库查询获取结果;
8、再次刷新又消失,10秒钟内只查询一次结果,并且10秒更新一次数据,大大提高了服务器的访问性能;
9、10秒是如何得来的?看上面的注释... |