伺服器中的資料庫
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伺服器是乙個事件驅動程式,伺服器需要處理以下兩類事件 檔案事件 檔案事件就是伺服器...