redis緩存隔離三部曲_redis基礎(chǔ)知識(一)

本篇為基礎(chǔ)篇

前言

  • 相信很多人都玩過新浪硫麻,新浪的首頁那么多模塊,那么多文章,而且每天那么多的訪問量魄鸦, 如果每次有人去訪問就去查數(shù)據(jù)庫,而且一個(gè)人的操作可能需要很多次數(shù)據(jù)庫操作癣朗,這樣如果都是走數(shù)據(jù)庫拾因,可想而知頁面會不會很卡,數(shù)據(jù)庫壓力會很大旷余,而且很可能造成數(shù)據(jù)庫崩潰绢记。

  • 但是為什么新浪為什么能很快的響應(yīng)頁面?其中一部分功勞就是靠的Reids的緩存技術(shù)正卧。我去查詢內(nèi)存里的東西是不是會比數(shù)據(jù)庫快很多蠢熄?這樣我緩存中有我要的東西,我就去去緩存炉旷,否則我去找數(shù)據(jù)庫签孔,找到再放到緩存叉讥,方便以后查找。

  • 相比較Memcached筆者還是更喜歡Redis一點(diǎn)饥追,因?yàn)閞edis可以將緩存中的內(nèi)容寫入文件图仓,再服務(wù)器斷電時(shí),我也可以保存記錄判耕,最大的原因還是因?yàn)閞edis的數(shù)據(jù)類型比memcache多透绩,方便講無關(guān)系性的數(shù)據(jù)庫轉(zhuǎn)為有關(guān)系型數(shù)據(jù)庫一樣的使用。

redis的特點(diǎn)

  1. Redis不僅僅支持簡單的k/v類型的數(shù)據(jù)壁熄,同時(shí)還提供list帚豪,set,hash等數(shù)據(jù)結(jié)構(gòu)的存儲草丧。

  2. Redis支持?jǐn)?shù)據(jù)的備份狸臣,即master-slave模式的數(shù)據(jù)備份。

  3. Redis支持?jǐn)?shù)據(jù)的持久化昌执,可以將內(nèi)存中的數(shù)據(jù)保持在磁盤中烛亦,重啟的時(shí)候可以再次加載進(jìn)行使用。

Laravel中 使用的Redis

Redis 是一款開源且先進(jìn)的鍵值對數(shù)據(jù)庫懂拾。由于它可用的鍵包含了字符串煤禽、哈希、列表岖赋、集合 和 有序集合檬果,因此常被稱作數(shù)據(jù)結(jié)構(gòu)服務(wù)器。在使用 Redis 之前唐断,你必須通過 Composer 安裝 predis/predis 擴(kuò)展包(~1.0)选脊。

1.安裝predis組件

composer require "predis/predis:~1.0"

2.配置

應(yīng)用程序的 Redis 設(shè)置都在config/database.php配置文件中。在這個(gè)文件里脸甘,你可以看到 redis 數(shù)組里面包含了應(yīng)用程序使用的 Redis 服務(wù)器:

'redis' => [

    'cluster' => false,

    'default' => [
        'host'     => '127.0.0.1',
        'port'     => 6379,
        'database' => 0,
    ],

],

默認(rèn)的服務(wù)器配置對于開發(fā)來說應(yīng)該足夠了恳啥。然而,你也可以根據(jù)使用的環(huán)境來隨意更改數(shù)組丹诀。只需給每個(gè) Redis 指定名稱以及在服務(wù)器中使用的 host 和 port 即可钝的。

  • 基本使用方法

    1. STRING類型
    • 寫入字符串類型的redis

       class PhotoController extends Controller  
       {
           /**
            * Display a listing of the resource.
            *
            * @return \Illuminate\Http\Response
            */
           public function index()
           {
               //
               $key = 'STRING:TEST';
               $value = 'Hello-World';
               // 寫入一個(gè)字符串類型的redis
               $info = \Redis::Set($key,$value);
               dd($info);
               return view('test');
           }
       }
      
       頁面響應(yīng) :![](http://upload-images.jianshu.io/upload_images/2853374-9eade34be464d20b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
      
      • 讀取相應(yīng)的字符串

          class PhotoController extends Controller  
          {
              /**
               * Display a listing of the resource.
               *
               * @return \Illuminate\Http\Response
               */
              public function index()
              {
                  //
                  $key = 'STRING:TEST';
                  // 讀取一個(gè)字符串類型的redis
                  $info = \Redis::get($key);
                  dd($info);
                  return view('test');
              }
          }
        

      頁面響應(yīng) "hello word"

      和redis語法同樣的 字串也有incr和decr等遞增、遞減...

    1. LIST類型

      • 寫入隊(duì)列

          class PhotoController extends Controller  
          {
              /**
               * Display a listing of the resource.
               *
               * @return \Illuminate\Http\Response
               */
              public function index()
              {
                  //
                  $key = 'LIST:TEST:R';
                  $names = ['PHP','HTML','CSS','JavaScript','Node','Java','Ruby','Python'];
                  // 從右往左壓入隊(duì)列
                  $info = \Redis::rpush($key,$names);
                  dd($info);
                  return view('test');
              }
          }
        

        頁面響應(yīng) (寫入的數(shù)量) 8

      • 寫入隊(duì)列

          class PhotoController extends Controller  
          {
              /**
               * Display a listing of the resource.
               *
               * @return \Illuminate\Http\Response
               */
              public function index()
              {
                  //
                  $key = 'LIST:TEST:R';
                  $names = ['PHP','HTML','CSS','JavaScript','Node','Java','Ruby','Python'];
                  // 獲取隊(duì)列內(nèi)容(0到-1 所有 0到0是一位 0到1是兩位)
                  $info = \Redis::lrange($key,0,-1);
                  dd($info);
                  return view('test');
              }
          }
        

        頁面響應(yīng) (數(shù)組)
      • 從左往右塞入隊(duì)列 連貫方法

          class PhotoController extends Controller  
          {
              /**
               * Display a listing of the resource.
               *
               * @return \Illuminate\Http\Response
               */
              public function index()
              {
                  //
                  $key = 'LIST:TEST:L';
                  $names = ['PHP','HTML','CSS','JavaScript','Node','Java','Ruby','Python'];
                  // 從左往右存數(shù)據(jù)
                  \Redis::lpush($key,$names);
                  // 取出數(shù)據(jù)
                  $info = \Redis::lrange($key,0,-1);
                  dd($info);
                  return view('test');
              }
          }
        

        頁面響應(yīng) (數(shù)組 是不是正好和上面的相反铆遭?)
    2. HASH類型

      • 存數(shù)據(jù)

          class PhotoController extends Controller  
          {
              /**
               * Display a listing of the resource.
               *
               * @return \Illuminate\Http\Response
               */
              public function index()
              {
                  //
                  $key = 'HASH:TEST';
                  $names = ['id'=>'99',
                            'name'=>'AXiBa',
                            'age'=>'23',
                            'tel'=>'13995578699',
                            'addtime'=>'1231231233'];
                  // 將數(shù)據(jù)寫入hash
                  $info = \Redis::hMset($key,$names);
                  dd($info);
                  return view('test');
              }
          }
        

        頁面響應(yīng)
      • 取數(shù)據(jù)(取所有)

          class PhotoController extends Controller  
          {
              /**
               * Display a listing of the resource.
               *
               * @return \Illuminate\Http\Response
               */
              public function index()
              {
                  //
                  $key = 'HASH:TEST';
                  $names = ['id'=>'99',
                            'name'=>'AXiBa',
                            'age'=>'23',
                            'tel'=>'13995578699',
                            'addtime'=>'1231231233'];
                  // 取出hash里的數(shù)據(jù)
                  $info = \Redis::hGetall($key);
                  dd($info);
                  return view('test');
              }
          }
        

        頁面響應(yīng)
      • 取數(shù)據(jù)(取個(gè)別字段)

          class PhotoController extends Controller  
          {
              /**
               * Display a listing of the resource.
               *
               * @return \Illuminate\Http\Response
               */
              public function index()
              {
                  //
                  $key = 'HASH:TEST';
                  $names = ['id'=>'99',
                            'name'=>'AXiBa',
                            'age'=>'23',
                            'tel'=>'13995578699',
                            'addtime'=>'1231231233'];
                  // 取出hash里的 某一個(gè)字段的數(shù)據(jù)
                  $info = \Redis::hGet($key,'name');
                  dd($info);
                  return view('test');
              }
          }
        

        頁面響應(yīng)
4. 集合

    - 求兩個(gè)集合的交集

            class PhotoController extends Controller  
            {
                /**
                 * Display a listing of the resource.
                 *
                 * @return \Illuminate\Http\Response
                 */
                public function index()
                {
                    //
                    $key = 'SET:TEST';
                    $key1 = 'SET:TEST:1';
                    $value = ['a','b','c','d','e'];
                    $value1 = ['a','b','c','1','2'];
                    // 寫入另一個(gè)集合
                    \Redis::sadd($key1,$value1);
                    // 交集
                    $info = \Redis::sinter($key,$key1);
                    dd($info);
                    return view('test');
                }
            }
        頁面響應(yīng) ![](http://upload-images.jianshu.io/upload_images/2853374-01b65a52115f83f8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

    - 求兩個(gè)集合的并集

            class PhotoController extends Controller  
            {
                /**
                 * Display a listing of the resource.
                 *
                 * @return \Illuminate\Http\Response
                 */
                public function index()
                {
                    //
                    $key = 'SET:TEST';
                    $key1 = 'SET:TEST:1';
                    $value = ['a','b','c','d','e'];
                    $value1 = ['a','b','c','1','2'];
                    // 并集
                    $info = \Redis::sunion($key,$key1);
                    dd($info);
                    return view('test');
                }
            }

        頁面響應(yīng) ![](http://upload-images.jianshu.io/upload_images/2853374-174fbadfcbb1af7d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

    - 求兩個(gè)集合的差集

            class PhotoController extends Controller  
            {
                /**
                 * Display a listing of the resource.
                 *
                 * @return \Illuminate\Http\Response
                 */
                public function index()
                {
                    //
                    $key = 'SET:TEST';
                    $key1 = 'SET:TEST:1';
                    $value = ['a','b','c','d','e'];
                    $value1 = ['a','b','c','1','2'];
                    // 差集
                    $info = \Redis::sdiff($key,$key1);
                    dd($info);
                    return view('test');
                }
            }

        > 哪個(gè)key在前扁藕,就以哪個(gè)key的值為基準(zhǔn)。疚脐。

        頁面響應(yīng) ![](http://upload-images.jianshu.io/upload_images/2853374-7489c7c98031d665.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

5. SET類型

    - 寫入一個(gè)無序集合(數(shù)據(jù)插入無順序)

            class PhotoController extends Controller  
            {
                /**
                 * Display a listing of the resource.
                 *
                 * @return \Illuminate\Http\Response
                 */
                public function index()
                {
                    //
                    $key = 'SET:TEST';
                    $value = ['a','b','c','d','e'];
                    $info = \Redis::sadd($key,$value);
                     $info = \Redis::smembers($key);
                    dd($info);
                    return view('test');
                }
            }

        頁面響應(yīng) ![](http://upload-images.jianshu.io/upload_images/2853374-c85c985cdca52b22.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


6. 判斷這個(gè)redis key是否存在
    
        \Redis::exists($key);

當(dāng)然了邢疙,這里只是一些最基本的Redis緩存demo棍弄,其實(shí)他的強(qiáng)大遠(yuǎn)遠(yuǎn)不止這些望薄,操作也不止這些,比如隊(duì)列里的彈出呼畸,比如集合與集合之間的復(fù)雜關(guān)系運(yùn)用...如何將非關(guān)系型的Redis運(yùn)用成關(guān)系型數(shù)據(jù)庫那樣痕支??Redis的一些實(shí)用場景又是那一些蛮原?卧须?敬請查看下一篇--"Redis 三部曲之第二部 laravel中Redis 基本的數(shù)據(jù)隔離"。

再次特別感謝倡哥的博客和倡哥的指導(dǎo)
本文為作者參考倡哥博格加實(shí)戰(zhàn)所總結(jié)而來儒陨,允許轉(zhuǎn)載花嘶,轉(zhuǎn)載后請以鏈接形式說明文章出處.
倡哥,博客地址:http://blog8090.com

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蹦漠,一起剝皮案震驚了整個(gè)濱河市椭员,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌笛园,老刑警劉巖隘击,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異研铆,居然都是意外死亡埋同,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進(jìn)店門棵红,熙熙樓的掌柜王于貴愁眉苦臉地迎上來凶赁,“玉大人,你說我怎么就攤上這事窄赋∮炊” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵忆绰,是天一觀的道長浩峡。 經(jīng)常有香客問我,道長错敢,這世上最難降的妖魔是什么翰灾? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮稚茅,結(jié)果婚禮上纸淮,老公的妹妹穿的比我還像新娘。我一直安慰自己亚享,他們只是感情好咽块,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著欺税,像睡著了一般侈沪。 火紅的嫁衣襯著肌膚如雪揭璃。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天亭罪,我揣著相機(jī)與錄音瘦馍,去河邊找鬼。 笑死应役,一個(gè)胖子當(dāng)著我的面吹牛情组,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播箩祥,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼院崇,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了滥比?” 一聲冷哼從身側(cè)響起亚脆,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎盲泛,沒想到半個(gè)月后濒持,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡寺滚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年柑营,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片村视。...
    茶點(diǎn)故事閱讀 38,059評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡官套,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蚁孔,到底是詐尸還是另有隱情奶赔,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布杠氢,位于F島的核電站站刑,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏鼻百。R本人自食惡果不足惜绞旅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望温艇。 院中可真熱鬧因悲,春花似錦、人聲如沸勺爱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蝎土,卻和暖如春视哑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背誊涯。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蒜撮,地道東北人暴构。 一個(gè)月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像段磨,于是被迫代替她去往敵國和親取逾。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容