Redis核心技術與實戰(實戰部分)


11 | “萬金油”的String,為什么不好用了?

String 類型並不是適用於所有場合的,它有一個明顯的短板,就是它保存數據時所消耗的內存空間較多。

 

 

用什么數據結構可以節省內存?

   Redis 有一種底層數據結構,叫壓縮列表(ziplist),這是一種非常節省內存的結構。

如何用集合類型保存單值的鍵值對?

  以圖片 ID 1101000060 和圖片存儲對象 ID 3302000080 為例,我們可以把圖片 ID 的前 7 位(1101000)作為 Hash 類型的鍵,把圖片 ID 的最后 3 位(060)和圖片存儲對象 ID 分別作為 Hash 類型值中的 key 和 value。

12 | 有一億個keys要統計,應該用哪種集合?

 要想選擇合適的集合,我們就得了解常用的集合統計模式

所謂的聚合統計

  就是指統計多個集合元素的聚合結果,包括:統計多個集合的共有元素(交集統計);把兩個集合相比,統計其中一個集合獨有的元素(差集統計);統計多個集合的所有元素(並集統計)。

  

排序統計

  List 是按照元素進入 List 的順序進行排序的,而 Sorted Set 可以根據元素的權重來排序

 

二值狀態統計

  bitmap   三百六五天,設置每天的狀態0 ,1.  setbit userkey1 1 (第二天)   1(狀體0,1)

16 | 異步機制:如何避免單線程模型的阻塞?

  Redis 的各種關鍵操作,以及其中的阻塞式操作,我們來總結下剛剛找到的五個阻塞點:

集合全量查詢和聚合操作;

bigkey 刪除;

清空數據庫;

AOF 日志同步寫;

從庫加載 RDB 文件。

 

17 | 為什么CPU結構也會影響Redis的性能?

每調度一次,一些請求就會受到運行時信息、指令和數據重新加載過程的影響,這就會導致某些請求的延遲明顯高於其他請求

 我們要避免 Redis 總是在不同 CPU 核上來回調度執行。於是,我們嘗試着把 Redis 實例和 CPU 核綁定了,讓一個 Redis 實例固定運行在一個 CPU 核上。我們可以使用 taskset 命令把一個程序綁定在一個核上運行。

 

25 | 緩存異常(上):如何解決緩存和數據庫的數據不一致問題?

數據的一致性:這里的“一致性”包含了兩種情況:

  緩存中有數據,那么,緩存的數據值需要和數據庫中的值相同;

  緩存中本身沒有數據,那么,數據庫中的值必須是最新值。

1. 新增數據

  屬於第一種情況,不需要操作緩存。

2. 刪改數據

  屬於第二種請情況:

先刪除緩存,緩存數據缺失

先刪除數據庫,緩存刪除失敗,可以重試。

 

26 | 緩存異常(下):如何解決緩存雪崩、擊穿、穿透難題?

緩存雪崩:redis節點異常,或者大量key同時失效,導致數據庫壓力暴增。

緩存擊穿:熱點數據,在緩存失效的那一刻,大量請求請求到數據庫,造成數據庫壓力。

緩存穿透:數據庫不存在的值,沒有被緩存下來,請求直接到達數據庫,造成數據庫壓力。 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM