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同時失效,導致數據庫壓力暴增。
緩存擊穿:熱點數據,在緩存失效的那一刻,大量請求請求到數據庫,造成數據庫壓力。
緩存穿透:數據庫不存在的值,沒有被緩存下來,請求直接到達數據庫,造成數據庫壓力。
