分享

Redis缓存Mysql技术实现

 WindySky 2017-11-23

Redis缓存的相关内容这里不介绍,具体可参考博文《Redis安装、配置及拓展使用总结》。而这里着重介绍下Redis如何缓存Mysql的IO压力,做到可观的性能提升目的。在实际的业务需求下,随着企业数据量的不断递增,访问数据库的IO频率大大提升,即使Mysql做了相关的优化,但也不能满足需求,时而等待许久服务端才会响应。

 

·     准备工作

·     缓存实现

 

一、准备工作

1、数据构建

结合上一篇文章《Redis管道技术使用总结》中的数据同步为例进行说明,地址:

http://blog.csdn.net/why_2012_gogo/article/details/51260264

 

2、缓存描述

以用户登录为例进行说明(只实现后台部分,使用Redis前提是用户量已经达到百万级,否则有点大才小用)。首先从Redis中查询(为了提高访问响应速度),前提是Mysql中的数据已经同步到Redis中,如果Redis中已经存在该用户,那么就直接从其中获取并返回,否则再从Mysql中读取。

 

二、缓存实现

Redis缓存Mysql的实现比较简单,在文章的叙述部分已经说明,这里不再赘述。这部分主要介绍的内容是介绍如何从Redis和mysql中获取数据,如何缓存Mysql的基本实现,因为前面已经做好了Redis和Mysql之间的数据格式协议,并在同步的时候,就将redis的Hash做好了对应关系,并转化为json格式。

 

1、PHP代码

<?php

      // 使用Redis缓存Mysql

      public function redisCacheMysql(){

            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).'</br>';

                  } else {

                        $result .= '结果:该用户不存在!</br>';

                  }

                  $result .= '我从mysql中读取的!';

            } else {

                  // 存在 就从redis中取

                  $user =$uRedis->hGetAll($userKey);

                  if($user) {

                        $result .=json_encode($user).'</br>';

                  } else {

                        $result .= '结果:该用户不存在!</br>';

                  }

                  $result .= '我从Redis中读取的!';

            }

           

            echo '结果:'.$result .= '</br>';

      }

?>

 

2、结果验证

Redis无缓存时:

此时,我们可以在mysql中新增一条Redis中未缓存的记录,然后执行:

 

Redis有缓存时:

 

 

NOTE:

使用Redis缓存Mysql的实现是很有必要的,当实际数据量很大并且请求频次很高的时候,Redis就凸显出了它的优势所在,这样做的目的有:a、减轻数据库IO的压力,b、提高用户请求响应的速度。

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多