西部数码主机 | 阿里云主机| 虚拟主机 | 服务器 | 返回乐道官网
当前位置: 主页 > 开发教程 > mysql教程 >

使用Memcache/Redis缓存 MYSQL的查询和更新 降低mysql的连接率开销

时间:2016-07-14 09:05来源:未知 作者:好模板 点击:
Memcache 缓存 MYSQL的查询 降低mysql的连接率 使用 Memcache/Redis 缓存 MYSQL的查询和更新 降低mysql的连接率开销 其实大部分的mysql查询 都是可以被短期缓存的 这种在大流量并发的情况下 可以

Memcache 缓存 MYSQL的查询 降低mysql的连接率

使用 Memcache/Redis 缓存 MYSQL的查询和更新 降低mysql的连接率开销

其实大部分的mysql查询 都是可以被短期缓存的

这种在大流量并发的情况下 可以非常有效的降低查询开销

这里介绍2种场景 使用Memcache来缓存

第一种 查询数据

 $memcache = new Memcache;
 $memcache->connect('127.0.0.1', 11211) or die ("Could not connect");
 $uuid = md5('前缀_'.$value); //作为存储的唯一key
 $data = $memcache->get($uuid);//查询缓存
 if(!$data) {  // 没缓存
 $data = mysql_query('查询数据库');
 $memcache->set($uuid,$data,1800); //设置缓存,这里的1800 = 半小时  3600 = 1小时
 }
 var_dump($data);

第二种 更新数据

这种固定在更新数字上 例如 帖子 被点击+1用户访问页数 +1

通常会直接更新mysql 每次+1 都要connection mysql 然后update 操作

小流量当然无所谓 但是大流量的情况 就非常耗费资源了

使用缓存 可以这样做 达到一个量级 在一次性更新 比如点击数缓存已经达到50 就更新一次点击数

这样本来想要connection 50次mysql + update 50次+1 就变为 connection 1次 + update 1次+50

开销当然降低了 对吧

以Redis来做例子 和Memcache/ SSDB / levelDB 都类似 差别不大

$aid = isset($_GET['aid']) ? trim($_GET['aid']) : 0;
$this_click_num = 0;
 
if($aid != 0 AND empty($aid)) {
 
 $update_till_num = 100; //达到100才更新一次mysql
 
 $r = new Redis();
 $r->connect('127.0.0.1',6379);
 $this_click_num = $r->get('count_xin_newgame:'.$aid);  //取当前点击数
 $r->set('count_xin_newgame:'.$aid,$this_click_num+1); //当前点击数+1
 if($this_click_num >= $update_till_num) { //如果数据超 $update_till_num  定义的 100条 就更新mysql数据库
 require_once(dirname(__FILE__)."/db.php");
 $db->ExecuteNoneQuery(
 "UPDATE `addonnewgame`
SET `game_num` = game_num + '{$update_till_num}'
WHERE `dede_addonnewgame`.`aid` ={$aid};"
 ); 
 $r->set('count_xin_newgame:'.$aid,0); //更新完成以后 重新将AID的点击数 设置为0
 }
 
 $r->setTimeout('count_xin_newgame:'.$aid,7*24*60*60);
 exit($this_click_num);
}
(责任编辑:好模板)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
热点内容