程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 第八章 Redis數據庫結構與讀寫原理,第八章redis

第八章 Redis數據庫結構與讀寫原理,第八章redis

編輯:JAVA綜合教程

第八章 Redis數據庫結構與讀寫原理,第八章redis


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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved