我們本文的面試題是,Redis 如何處理已過期的數據?
在 Redis 中維護了壹個過期字典,會將所有已經設置了過期時間的鍵值全部存儲到此字典中,例如我們使用設置過期時間的命令時,命令如下:
此命令表示 5s 之後鍵值為 mykey:java 的數據將會過期,其中 ex 是 expire 的縮寫,也就是過期、到期的意思。
過期時間除了上面的那種字符類型的直接設置之外,還可以使用 expire key seconds 的方式直接設置,示例如下:
獲取鍵值的執行流程是,當有鍵值的訪問請求時 Redis 會先判斷此鍵值是否在過期字典中,如果沒有表示鍵值沒有設置過期時間(永不過期),然後就可以正常返回鍵值數據了;如果此鍵值在過期字典中則會判斷當前時間是否小於過期時間,如果小於則說明此鍵值沒有過期可以正常返回數據,反之則表示數據已過期,會刪除此鍵值並且返回給客戶端 nil ,執行流程如下圖所示:
這是鍵值數據的方法流程,同時也是過期鍵值的判斷和刪除的流程。
本文的面試題考察的是妳對 Redis 的過期刪除策略的掌握,在 Redis 中為了平衡空間占用和 Redis 的執行效率,采用了兩種刪除策略,上面的回答不完全對,因為他只回答出了壹種過期鍵的刪除策略,和此知識點相關的面試題還有以下這些:
常見的過期策略,有以下三種: