Redis缓存的相关内容这里不介绍,具体可参考博文《Redis安装、配置及拓展使用总结》。而这里着重介绍下Redis如何缓存Mysql的IO压力,做到可观的性能提升目的。在实际的业务需求下,随着企业数据量的不断递增,访问数据库的IO频率大大提升,即使Mysql做了相关的优化,但也不能满足需求,时而等待许久服务端才会响应。
· 准备工作
· 缓存实现
一、准备工作
1、数据构建
结合上一篇文章《Redis管道技术使用总结》中的数据同步为例进行说明,地址:
2、缓存描述
以用户登录为例进行说明(只实现后台部分,使用Redis前提是用户量已经达到百万级,否则有点大才小用)。首先从Redis中查询(为了提高访问响应速度),前提是Mysql中的数据已经同步到Redis中,如果Redis中已经存在该用户,那么就直接从其中获取并返回,否则再从Mysql中读取。
二、缓存实现
Redis缓存Mysql的实现比较简单,在文章的叙述部分已经说明,这里不再赘述。这部分主要介绍的内容是介绍如何从Redis和mysql中获取数据,如何缓存Mysql的基本实现,因为前面已经做好了Redis和Mysql之间的数据格式协议,并在同步的时候,就将redis的Hash做好了对应关系,并转化为json格式。
1、PHP代码
//使用Redis缓存Mysql
public functionredisCacheMysql(){
header("Content-Type:text/html;charset=utf-8");
$uRedis = new\Redis();
$uRedis->connect('127.0.0.1',6379);
//前端获得的账号信息(这只是演示例子,也只是一种方式)
$account = 'cwteam';
$password = 'e10adc3949ba59abbe56e057f20f883e';
$result = '';
$userKey = $account.$password.'_hash';
//先从Redis中取,如果没有就去请求mysql
if(!$uRedis->exists($userKey)) {
//不存在 读取数据库
$where = array();
$where['account'] = $account;
$where['password'] = $password;
$user = D('UserInfo')->where($where)->find();
if($user) {
$result .= json_encode($user).'';
} else{
$result .= '结果:该用户不存在!';
}
$result .= '我从mysql中读取的!';
} else{
//存在 就从redis中取
$user =$uRedis->hGetAll($userKey);
if($user) {
$result .=json_encode($user).'';
} else{
$result .= '结果:该用户不存在!';
}
$result .= '我从Redis中读取的!';
}
echo'结果:'.$result .=
'';
}
?>
2、结果验证
Redis无缓存时:
此时,我们可以在mysql中新增一条Redis中未缓存的记录,然后执行:
Redis有缓存时:
NOTE:
使用Redis缓存Mysql的实现是很有必要的,当实际数据量很大并且请求频次很高的时候,Redis就凸显出了它的优势所在,这样做的目的有:a、减轻数据库IO的压力,b、提高用户请求响应的速度。