Redis 學習筆記 單機資料庫機制(4)

2021-10-05 08:34:21 字數 1628 閱讀 9661

伺服器中的資料庫

redis伺服器將所有資料庫都儲存在資料庫狀態redis.h/redisserver結構的db陣列中。db中每個都是redis.h/redisdb結構,每個這個結構都代表乙個資料庫。預設建立16個資料庫。

示例:

切換資料庫:select x (x:第x+1個資料庫)

資料庫鍵控件

redisdb結構的dict字典儲存了資料庫中的所有鍵值對,我們將這個字典稱為鍵空間。

示例:

讀寫資料庫時的維護操作

鍵的生存時間或過期時間

通過expire命令或者pexpire命令,客戶端可以以秒或者毫秒精度為資料庫中的某個鍵設定生存時間( time to live, ttl),在經過指定的秒數或者毫秒數之後,伺服器就會自動刪除生存時間為0的鍵。

如:expire key 5 (5秒後過期) pexpire key 5 (5毫秒)

也可以通過expireat和pexpireat命令,以毫秒或者秒給資料庫某個鍵設定過期時間(expire time) 這個過期時間是個時間戳。

如:expireat key 1587030965 (秒) pexpireat key 1587030965000 (毫秒)

過期時間的儲存

redisdb結構的expire字典儲存了資料庫中所有的過期時間。

資料庫例子:

其他命令:

過期鍵的判定:

檢查鍵是否存在於過期字典,如果存在,那麼取得過期時間。

檢查當前unix時間戳是否大於鍵的過期時間。如果是的話,那麼鍵已過期,否在未過期。

過期鍵的刪除策略

總共3種刪除策略

惰性刪除:放任鍵過期不管,但是每次從鍵空間中獲取鍵時,都檢查取得的鍵是否過期,如果過期的話,就刪除該鍵;如果沒有過期,就返回該鍵。

定期刪除:定期是前兩種的一種整合和折中,每隔一段時間,程式就對資料庫進行一次檢查,刪除裡面的過期鍵。至於要刪除多少過期鍵,以及要檢查多少個資料庫,則由演算法決定。

redis的過期鍵刪除策略

redis伺服器使用的是惰性刪除和定期刪除兩種策略。

定期刪除的實現

每當redis的服務週期性呼叫redis.c/servercron函式時,activeexpirecycle函式就會被呼叫。在規定時間內分多次遍歷伺服器的各個資料庫,檢查過期時間,刪除過期鍵。

aof、rdb和複製功能對過期鍵的處理

載入rdb檔案

aof檔案寫入

aof重寫 複製

當伺服器執行在複製模式下時,從伺服器的過期鍵刪除動作由主伺服器控制:

資料庫通知

這個功能可以讓客戶端通過訂閱給定的頻道或者模式,來獲知資料庫中鍵的變化,以及資料庫中命令的執**況。

伺服器配置的 notify- keyspace- events選項決定了伺服器所傳送通知的型別:

重點回顧[1]《redis設計與實現》.(黃健巨集)

《Redis設計與實現》學習筆記 單機資料庫

乙個redis伺服器例項在單機執行時可以新增多個資料庫來儲存鍵值對,redis在實現中通過乙個redisdb結構體來描述資料庫,該結構體中有乙個字典型別的字段來儲存資料庫中所有的鍵值對,redisserver結構體來描述伺服器例項,該結構體中有乙個dbnum欄位來儲存資料庫數量,乙個redisdb陣...

Redis 單機資料庫的實現 資料庫原理

目錄 1.伺服器中的資料庫 2.資料庫鍵空間 2.1.讀寫空間時的維護操作 3.過期時間 4.過期刪除策略 4.1.定時刪除 4.2.惰性刪除 4.3.定期刪除 4.4.redis刪除策略 5.aof rdb和複製功能對對過期鍵的處理 5.1.rdb 5.2.aof 5.3.複製 6.資料庫通知 r...

redis原始碼 單機資料庫的實現

redis伺服器將所有資料庫都儲存在伺服器狀態db陣列中。dbnum由conf檔案database選項決定。struct redisserver 分析rdb檔案 od c dump.rdbredis事件驅動 redis伺服器是乙個事件驅動程式,伺服器需要處理以下兩類事件 檔案事件 檔案事件就是伺服器...