Redis持久化、內存配置以及緩存問題的簡單介紹

關於Redis配置說明

Redis持久化的說明

redis默認條件下支持數據的持久化操做,當redis中有數據時會按期將數據保存到磁盤中,當redis服務器重啓時會根據配置文件讀取指定的持久化文件,實現內存數據的恢復。nginx

持久化方式

RDB模式

特色:
1.RDB模式是redis的默認的持久化策略。
2.RDB模式記錄的是redis內存數據的快照,最新的快照會覆蓋以前的內容,全部RDB持久化文件佔用空間更小,持久化的效率更高。
3.RDB模式因爲按期持久化,因此可能致使數據的丟失。redis

命令:算法

  1. save 要求當即立刻持久化 同步的操做 其餘的redis操做會陷入阻塞的狀態.
  2. bgsave 開啓後臺運行 異步的操做 因爲是異步操做,因此沒法保證rdb文件必定是最新的須要等待.

配置:
1.持久化文件名稱
image.png
2.持久化文件位置
dir./ 相對路徑的寫法。
dir/usr/local/src/redis 絕對路徑的寫法。
image.png
3.RDB模式持久化策略
image.png數據庫

AOF模式

特色:
1.AOF模式默認條件下是關閉的,須要手動開啓。
image.png
2.AOF模式是異步的操做,記錄的是用戶的操做的過程,能夠防止用戶的數據丟失。
3.因爲AOF模式記錄的是程序的運行狀態,因此持久化文件相對較大,恢復數據的時間長, 須要人爲的優化持久化文件。
配置:
image.png
總結:
1.若是不容許數據丟失,使用AOF模式。
2.若是追求效率,容許少許數據丟失,採用RDB模式。
3.若是紀要保證效率,又要保證數據,則應該配置redis的集羣,主機使用RDB模式,從機使用AOF模式。緩存

關於Redis內存策略

關於內存策略的說明

Redis數據的存儲都在內存中.若是一直向內存中存儲數據 必然會致使內存數據的溢出.
解決方式:tomcat

  1. 儘量爲保存在redis中的數據添加超時時間.
  2. 利用算法優化舊的數據.

LRU算法

特色: 最好用的內存優化算法.
LRU是Least Recently Used的縮寫,即最近最少使用,是一種經常使用的數據置換算法,選擇最近最久未使用的數據予以淘汰。該算法賦予每一個數據一個訪問字段,用來記錄一個數據自上次被訪問以來所經歷的時間 t,當須淘汰一個數據時,選擇現有數據中其 t 值最大的,即最近最少使用的數據予以淘汰。
維度: 時間 T服務器

LFU算法

LFU(least frequently used (LFU) page-replacement algorithm)。即最不常用頁置換算法,要求在頁置換時置換引用計數最小的頁,由於常用的頁應該有一個較大的引用次數。可是有些頁在開始時使用次數不少,但之後就再也不使用,這類頁將會長時間留在內存中,所以能夠將引用計數寄存器定時右移一位,造成指數衰減的平均使用次數。
維度: 使用次數併發

RANDOM算法

即隨機刪除數據。dom

TTL算法

把設定了超時時間的數據將要移除的提早刪除的算法。異步

Redis內存數據優化

1.volatile-lru 設定了超時時間的數據採用lru算法。
2.allkeys-lru 全部的數據採用LRU算法。
3.volatile-lfu 設定了超時時間的數據採用lfu算法刪除。
4.allkeys-lfu 全部數據採用lfu算法刪除。
5.volatile-random 設定超時時間的數據採用隨機算法。
6.allkeys-random 全部數據的隨機算法。
7.volatile-ttl 設定超時時間的數據的TTL算法。
8.noeviction 若是內存溢出了 則報錯返回. 不作任何操做. 默認值。
image.png

關於Redis緩存問題

問題描述: 若是海量用戶同時請求 而這時redis服務器出現問題 則可能致使整個系統崩潰.
運行速度:

  1. tomcat服務器 150-250 之間 JVM調優 1000/秒
  2. NGINX 3-5萬/秒
  3. REDIS 讀 11.2萬/秒 寫 8.6萬/秒 平均 10萬/秒

緩存穿透

問題描述: 因爲用戶高併發環境下訪問 數據庫中不存在的數據時 ,容易致使緩存穿透.
解決方案: 設定IP限流的操做 nginx中 或者微軟服務機制 API網關實現.

緩存擊穿

問題描述: 因爲用戶高併發環境下, 因爲某個數據以前存在於內存中,可是因爲特殊緣由(數據超時/數據意外刪除)致使redis緩存失效. 而使大量的用戶的請求直接訪問數據庫。
解決方案:
1.設定超時時間時 不要設定相同的時間。
2.設定多級緩存。
image.png

緩存雪崩

問題描述: 因爲高併發條件下 有大量的數據失效.致使redis的命中率過低.而使得用戶直接訪問數據庫(服務器)致使崩潰,稱之爲緩存雪崩.
解決方案:
1.不要設定相同的超時時間 隨機數
2.設定多級緩存.
3.提升redis緩存的命中率 調整redis內存優化策略 採用LRU等算法.
image.png

相關文章
相關標籤/搜索