redis緩存

1.Redis 持久化機制

Redis 有兩種持久化機制:RDB和AOFredis

Redis 的持久化是能夠禁用的,就是說你可讓數據的生命週期只存在於服務器的運行時間裏。兩種方式的持久化是能夠同時存在的,可是當 Redis 重啓時,AOF 文件會被優先用於重建數據。數據庫

(1)RDB

RDB 持久化方式會在一個特定的間隔保存那個時間點的一個數據快照後端

(2)AOF

AOF 持久化方式則會記錄每個服務器收到的寫操做。在服務啓動時,這些記錄的操做會逐條執行從而重建出原來的數據。寫操做命令記錄的格式跟 Redis 協議一致,以追加的方式進行保存緩存

2.Redis 集羣方案與實現

  • 客戶端分片
  • 基於代理的分片
  • 路由查詢
  • 客戶端分片
  • 由客戶端決定 key 寫入或者讀取的節點
  • 包括 Jedis 在內的一些客戶端,實現了客戶端分片機制

3.Redis 內部結構

Redis 內部使用一個 redisObject 對象來表示全部的 key 和 value。服務器

4.Redis 內存淘汰機制

能夠設置內存最大使用量,當內存使用量超出時,會施行數據淘汰策略。網絡

Redis 具體有 6 種淘汰策略:併發

策略  描述
volatile-lru 從已設置過時時間的數據集中挑選最近最少使用的數據淘汰
volatile-ttl  從已設置過時時間的數據集中挑選將要過時的數據淘汰

volatile-random
 從已設置過時時間的數據集中任意選擇數據淘汰
allkeys-lru  從全部數據集中挑選最近最少使用的數據淘汰
allkeys-random  從全部數據集中任意選擇數據進行淘汰
noeviction  禁止驅逐數據

 

 

 

 

 

 

 

 

5.Redis 爲何是單線程的

由於 CPU 不是 Redis 的瓶頸。Redis 的瓶頸最有多是機器內存或者網絡帶寬。(以上主要來自官方 FAQ)既然單線程容易實現,並且 CPU 不會成爲瓶頸,那就瓜熟蒂落地採用單線程的方案了。dom

6.Redis 有哪些類型

在 Redis 中有五種數據類型異步

  • String:字符串
  • Hash:字典
  • List:列表
  • Set:集合
  • Sorted Set:有序集合

7.緩存崩潰

  • 碰到這種狀況,通常併發量不是特別多的時候,使用最多的解決方案是加鎖排隊。
  • 加鎖排隊只是爲了減輕數據庫的壓力,並無提升系統吞吐量。假設在高併發下,緩存重建期間 key 是鎖着的,這時過來 1000 個請求 999 個都在阻塞的。一樣會致使用戶等待超時。

8.緩存降級

(1)頁面降級

在大促或者某些特殊狀況下,某些頁面佔用了一些稀缺服務資源,在緊急狀況下能夠對其整個降級,以達到丟卒保帥;高併發

(2)頁面片斷降級

好比商品詳情頁中的商家部分由於數據錯誤了,此時須要對其進行降級;

(3)頁面異步請求降級

好比商品詳情頁上有推薦信息/配送至等異步加載的請求,若是這些信息響應慢或者後端服務有問題,能夠進行降級;

(4)服務功能降級

好比渲染商品詳情頁時須要調用一些不過重要的服務:相關分類、熱銷榜等,而這些服務在異常狀況下直接不獲取,即降級便可;

(5)讀降級

好比多級緩存模式,若是後端服務有問題,能夠降級爲只讀緩存,這種方式適用於對讀一致性要求不高的場景;

(6)寫降級

好比秒殺搶購,咱們能夠只進行Cache的更新,而後異步同步扣減庫存到DB,保證最終一致性便可,此時能夠將DB降級爲Cache。

(7)爬蟲降級

在大促活動時,能夠將爬蟲流量導向靜態頁或者返回空數據,從而保護後端稀缺資源。

(8)自動開關降級

自動降級是根據系統負載、資源使用狀況、SLA等指標進行降級。

(9)超時降級

當訪問的數據庫/http服務/遠程調用響應慢或者長時間響應慢,且該服務不是核心服務的話能夠在超時後自動降級;若是是調用別人的遠程服務,和對方定義一個服務響應最大時間,若是超時了則自動降級。

9.使用緩存的合理性問題

  • 熱點數據,緩存纔有價值
  • 頻繁修改的數據,看狀況考慮使用緩存
  • 數據不一致性
  • 緩存更新機制
  • 緩存可用性
  • 緩存服務降級
  • 緩存預熱
  • 緩存穿透

10.聊聊 Redis 使用場景

  • 緩存
  • 會話緩存
  • 時效性
  • 訪問頻率
  • 計數器
  • 社交列表
  • 記錄用戶斷定信息
  • 交集、並集和差集
  • 熱門列表與排行榜
  • 最新動態
  • 消息隊列
相關文章
相關標籤/搜索