redis-資料庫
阿新 • • 發佈:2020-07-27
- edis 伺服器的所有資料庫都儲存在
redisServer.db
陣列中, 而資料庫的數量則由redisServer.dbnum
屬性儲存。 - 客戶端通過修改目標資料庫指標, 讓它指向
redisServer.db
陣列中的不同元素來切換不同的資料庫。 - 資料庫主要由
dict
和expires
兩個字典構成, 其中dict
字典負責儲存鍵值對, 而expires
字典則負責儲存鍵的過期時間。 - 因為資料庫由字典構成, 所以對資料庫的操作都是建立在字典操作之上的。
- 資料庫的鍵總是一個字串物件, 而值則可以是任意一種 Redis 物件型別, 包括字串物件、雜湊表物件、集合物件、列表物件和有序集合物件, 分別對應字串鍵、雜湊表鍵、集合鍵、列表鍵和有序集合鍵。
expires
字典的鍵指向資料庫中的某個鍵, 而值則記錄了資料庫鍵的過期時間, 過期時間是一個以毫秒為單位的 UNIX 時間戳。- Redis 使用惰性刪除和定期刪除兩種策略來刪除過期的鍵: 惰性刪除策略只在碰到過期鍵時才進行刪除操作, 定期刪除策略則每隔一段時間, 主動查詢並刪除過期鍵。
- 執行SAVE命令或者BGSAVE命令所產生的新 RDB 檔案不會包含已經過期的鍵。
- 執行BGREWRITEAOF命令所產生的重寫 AOF 檔案不會包含已經過期的鍵。
- 當一個過期鍵被刪除之後, 伺服器會追加一條DEL命令到現有 AOF 檔案的末尾, 顯式地刪除過期鍵。
- 當主伺服器刪除一個過期鍵之後, 它會向所有從伺服器傳送一條DEL命令, 顯式地刪除過期鍵。
- 從伺服器即使發現過期鍵, 也不會自作主張地刪除它, 而是等待主節點發來DEL命令, 這種統一、中心化的過期鍵刪除策略可以保證主從伺服器資料的一致性。
- 當 Redis 命令對資料庫進行修改之後, 伺服器會根據配置, 向客戶端傳送資料庫通知。