天天看點

Redis緩存Mysql技術實作

Redis緩存Mysql技術實作:

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緩存Mysql技術實作

Redis有緩存時:

Redis緩存Mysql技術實作

NOTE:

使用Redis緩存Mysql的實作是很有必要的,當實際資料量很大并且請求頻次很高的時候,Redis就凸顯出了它的優勢所在,這樣做的目的有:a、減輕資料庫IO的壓力,b、提高使用者請求響應的速度。

技術讨論群:

489451956(新)

繼續閱讀