第八章 Redis資料庫結構與讀寫原理

來源:互聯網
上載者:User

標籤:

註:本文主要參考自《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,用於持久化

第八章 Redis資料庫結構與讀寫原理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.