Redis資料庫結構與讀寫原理
此文已由作者趙計剛薪授權網易雲社群釋出。
歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。
1、資料庫結構
每一個redis伺服器內部的資料結構都是一個redisDb[],該陣列的大小可以在redis.conf中配置("database 16",預設為16),而我們所有的快取操作(set/hset/get等)都是在redisDb[]中的一個redisDb(庫)上進行操作,這個redisDb預設是redisDb[0]。
注意:
可以通過"select 1"來選擇接下來的操作在redisDb[1]上進行操作
在實際使用中,我們只在redisDb[0]上操作,因為
redis沒有獲取當前是在哪一個redisDb上操作的函式,所以很容易才select多次之後,我們就不知道在哪一個庫上了,而且既然是隻在redisDb[0]上進行操作,那麼"database"就可以設定為1了,
該引數設定為1後,不僅可以將原有的其他redisDb所佔的記憶體給了redisDb[0],在的"定期刪除"策略中,我們也只掃描一個redisDb就可以了。
"定期刪除"見 第九章 Redis過期策略
2、讀寫原理
在每一個redisDb中都以一個dict(字典)用於儲存"key-value"。
例子:
假設在redis中執行了如下四條命令並且沒有執行任何的select,即預設選擇在redisDb[0]上操作
set msg "hello nana"
rpush mylist "a" "b" "c"
hset book name "lover"
hset book author "nana"
則儲存結構如下:
3、讀寫時所進行的維護工作
在讀取一個key(讀寫操作都需要讀取key)後,
伺服器更新快取命中次數與不命中次數
更新該key的最後一次使用時間
檢測該key是否過期(詳細見 第九章 Redis過期策略)
寫計數器+1,用於持久化
免費領取驗證碼、內容安全、簡訊傳送、直播點播體驗包及雲伺服器等套餐
更多網易技術、產品、運營經驗分享請點選。
相關文章:
【推薦】 如何防止Unity3D程式碼被反編譯?