Redis 筆記

1.redis的特色

  優勢:速度快、類型豐富、豐富的特性、持久化存儲,單線程。redis

2. redis的應用場景

   (1)令牌生成(臨時有效期)算法

      (2)短信驗證碼(臨時有效期)spring

      (3)熱點數據(使用redis減輕數據庫的壓力)數據庫

      (4)使用redis實現消息中間件,發佈訂閱功能(不推薦)數組

        (這裏多說一下消息中間件的做用: 應用解耦,異步處理,錯峯與流控)緩存

      (5)分佈式鎖(使用zk或者redis 實現分佈式鎖)springboot

      (6)網站計數器(由於redis是單線程的,在高併發狀況下,保證記錄的惟一性)服務器

      (7)此外還有redis解決雪崩效應,redis多種集羣方案,reids持久化機制,reids哨兵機制網絡

3. redis 類型 

    (1)String類型  字符串    數據結構

      (2)List 列表  簡單的字符串列表,採用的雙向鏈表結構

      (3)Hash 字典  在值比較少時使用數組,值比較多的時候轉換成hashmap數據結構

      (4)Set 集合     String類型的無序集合,值是惟一的

      (5)Sorted Set 有序集合  值是惟一的,而且每一個成員都會關聯一個分數,並經過該分數排序。

4. redis 過時策略及清理算法問題

  (1)爲何不用定時刪除策略

    由於這樣須要用一個定時任務來監測全部點key,雖然內存能及時釋放,可是十分消耗資源。在大併發下cpu要將時間用來處理請求。

  (2)按期刪除+惰性刪除

     每隔100ms,隨機抽查一些key是否是過時,而後剩下的在獲取某個key的時候去校驗是否過時。

  (3)配置內存淘汰機制

    在redis.conf中有一行配置

    通常配置allkeys-lru 隨機刪除最近使用最少的key

         默認 volatile-lru – >使用LRU算法,僅對設置了過時時間的鍵採起LRU淘汰

 

 5.redis 持久化機制

  (1)概述

  redis持久化機制分爲RDB和AOF兩種,默認是快照RDB方式

 

  (2)RDB持久化方式

  redis.conf默認配置:

       save 900 1  900秒內,超過一個key被修改,則保存

       save 300 10   300秒內超過10個key被修改,則保存

       保存後默認生成一個dump.rdb的文件。

 

  (3)AOF方式

  redis.conf 默認配置

  appendonly no  默認爲30秒一次

  可修改成:

       appendfsync always 每次修改都會保存

  appendfsync everysec 每秒一次

  appendfsync no 每30秒一次

  默認保存文件爲appendonly.aof

 

  注:aof模式有個問題就是aof文件會變的很大。每每經過aof分析裏面有太多冗餘數據時,會進行重寫,這個操做知足必定條件是,Redis會自動觸發。通常生產環境通常要求    在達到幾個g或者幾十個g纔會重寫,由於重寫會影響redis性能。

  重寫參數:

  auto-aof-rewrite-percentage 100  重寫增加比例,如上次重寫是100,則在200時觸發。

  auto-aof-rewrite-min-size 64mb  最小觸發重寫的文件大小

  

6.redis 主從複製

  (1)什麼是主從複製

    將服務器分爲主服務器和從服務器,主服務器能夠容許讀寫操做,從服務器只能有讀操做。主服務器只能有一個。

  (2)主從複製的應用場景

    集羣,讀寫分離,日誌備份,高可用

  (3)什麼是讀寫分離

    讀和寫分庫鏈接,讀一個庫,寫一個庫,互不影響,增長總體吞吐量,讀寫分離須要解決兩個庫之間的數據同步問題,redis已解決

  (4)主從複製原理圖

  

 

  (5)主從複製存在的問題

   當數據同步延遲吃形成的主庫和從庫的不一致的問題。

      ①若是qq消息,論壇等容許短期內不一致的業務,就能夠不做處理。

      ②強制讀主,從庫只用來主庫掛掉事後的一個備份。

      ③不一樣的業務,在進行表操做時用緩存記錄下來,好比庫:表:主鍵 並設置一個過時時間,過時時間爲主從延時時間,若是讀到了key說明還在同步,須要去讀主庫,若是沒有   讀到key則去讀從庫。具體讀哪個由路由來完成。

 

7.主從複製的配置 

  在「從服務器」的redis.conf的 salveof 後面添加主服務器的ip地址+端口,若是主服務器配置了密碼  須要加上masterauth

  

 

 

 

 

 

 

8.redis安裝

  將redis-4.0.8.tar.gz包放在/usr/local下

       ①解壓tar -zxvf redis-4.0.8.tar.gz

     

  ② cd redis-4.0.8

  ③運行make

  

 

 

 

  報錯:

  zmalloc.h:50:31: 致命錯誤:jemalloc/jemalloc.h:沒有那個文件或目錄

   解決:使用這個make MALLOC=libc 替換 make

  ④make install PREFIX=/usr/local/redis

 

  ⑤移動配置文件到安裝目錄下

  cd ../

  mkdir /usr/local/redis/etc

  mv redis.conf /usr/local/redis/etc

 

   ⑥配置redis爲後臺啓動

  vi /usr/local/redis/etc/redis.conf //將daemonize no 改爲daemonize yes

  vi /usr/local/redis/etc/redis.conf // requirepass 123

 

  ⑦開啓redis

  /usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf

 

  ⑧鏈接Redis客戶端

  ./redis-cli -h 127.0.0.1 -p 6379 -a "123456"

  PING 結果表示成功

 

  ⑨關閉防火牆

  //臨時關閉

  systemctl stop firewalld

  //禁止開機啓動

  systemctl disable firewalld

  Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.

  Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

 

  ⑩中止Redis服務

  ./redis-cli -h 127.0.0.1 -p 6379 -a "123456"  shutdown

  修改redis.conf

  註釋掉

  #bind 127.0.0.1 開啓外網訪問

 

9.哨兵機制的配置

 

  (1)做用:心跳檢查,故障轉移(選舉策略),監控。

 

  注:哨兵注意事項:哨兵通常不和其餘redis服務器在一塊兒,啓動的時候先啓動哨兵的狀況下,最好先啓動主的redis,否則哨兵會覺得主掛掉了,進行選舉。

 

  (2)配置

 

  ①配置拷貝到etc目錄

 

  cp sentinel.conf  /usr/local/redis/etc

 

  ②修改sentinel.conf配置文件

  sentinel monitor mymast  192.168.110.133 6379 1  #主節點 名稱 IP 端口號 選舉次數

  一個Sentinel節選舉成爲Leader的最低票數爲quorum(就是6379後面那個1)Sentinel節點  數/2+1的最大值。

  sentinel auth-pass mymaster 123456

  ③ 修改心跳檢測 30毫秒

  sentinel down-after-milliseconds mymaster 30

  ④sentinel parallel-syncs mymaster 2

  sentinel parallel-syncs <master-name> <numslaves>

  注:這個配置項指定了在發生failover主備切換時最多能夠有多少個slave同時對新的master進行 同步,這個數字越小,完成failover所需的時間就越長,可是若是這個數字越大,  就意味着越 多的slave由於replication而不可用。能夠經過將這個值設爲 1 來保證每次只有一個slave 處於不能處理命令請求的狀態。

   ⑤啓動哨兵模式

  ./redis-server /usr/local/redis/etc/sentinel.conf --sentinel &

  ⑥中止哨兵模式

 

  ps -ef | grep redis

  ⑦若須要springboot 集成哨兵模式則須要

  把哨兵配置文件中的protected-mode no 的註釋放開

     搭建哨兵的時候要注意,全部服務器都須要配置密碼

        masterauth 123456

       主服務器不用配置 slaveof

  

10.redis 事務在spring中的使用

  

 

   

  muti()開啓

  exec()提交

  dicard() 回滾

 

 

 

 

11.使用 springboot + ehcache + redis 實現二級緩存

  一級(ehcache)+ 二級(redis) 目的是儘可能使用本地緩存:做用①若是本地沒有再走網絡。效率會更高。 ②減輕redis訪問壓力,提升訪問速度。③若是redis掛了,直接穿透到  數據庫容易形成雪崩效應。

 

     注意事項:1.一級緩存的過時時間,必定要比二級緩存的過時時間要少能有效控制一二級緩存不一樣步的問題。

 

                    2. 使用job定時任務去比較一二級緩存裏面的值,或者使用二級緩存更新後發送到mq裏面,而後在拿去更新一級緩存,這麼作比較耗資源。

  (代碼若是須要的話,能夠在下方評論)

  

  流程圖以下

  

相關文章
相關標籤/搜索