PHP memcache在数据库查询中应用,减少连接数据库的次数,降低服务器的压力!/*
*memcache应用说明memorycache内存缓存
*工作原理
*服务器端口port11211
*MemCached存取键值对key=>value
*1.内网访问
*2.设置防火墙
*/
//创建memcache对象
$mem=newMemcache();
//连接memcache服务器
$host='localhost';
$port='11211';
$mem->connect($host,$port);
//$mem->addserver($host,$port);
//$mem->addserver('192.168.10.254',11211);//新增一台服务器的内存
$dsn='mysql:dbname=test;host=localhost';
$username='root';
$passwd='root';
$options=array(
PDO::ATTR_AUTOCOMMIT=>true,
PDO::ATTR_PERSISTENT=>true
);
//连接数据库
try{
//创建对象
$pdo=newPDO($dsn,$username,$passwd,$options);
//设置错误使用异常模式
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
}catch(PDOException$e){
echo"数据库连接失败:".$e->getMessage();
exit;
}
$statement="select*fromuserswhereid>?andid
//键名用md5()加密后名字更规范防止查询语句信息泄漏
$key=md5($statement);
//直接从内存要数据
$data=$mem->get($key);
//判断是否存在$data,如果没有才需要连接数据库获取数据!数据直接从内存获取,实现缓存。
if(empty($data)){
try{
//给数据库管理系统,编译后等待没有执行
$pdostatement=$pdo->prepare($statement);
$pdostatement->execute(array(3,6));
//设置结果的模式
$pdostatement->setFetchMode(PDO::FETCH_NUM);
$data=$pdostatement->fetchAll(PDO::FETCH_ASSOC);
//保存在缓存中
$mem->set($key,$data,MEMCACHE_COMPRESSED,10);
echo'第一次数据库查询!
';
}catch(PDOException$e){
echo'错误的原因:'.$e->getMessage();
}
}
//按表格形式输出
echo'
foreach($dataas$value){
echo'
';
echo'
'.$value['id'].'';
echo'
'.$value['username'].'';
echo'
'.$value['password'].'';
echo'
'.$value['email'].'';
echo'
';
}
echo'
';
//关闭连接
$mem->close();