Redis 對象的空轉(zhuǎn)時長

2018-08-02 14:50 更新

除了前面介紹過的 type 、 encoding 、 ptr 和 refcount 四個屬性之外, redisObject 結(jié)構(gòu)包含的最后一個屬性為 lru 屬性, 該屬性記錄了對象最后一次被命令程序訪問的時間:

typedef struct redisObject {

    // ...

    unsigned lru:22;

    // ...

} robj;

OBJECT IDLETIME 命令可以打印出給定鍵的空轉(zhuǎn)時長, 這一空轉(zhuǎn)時長就是通過將當(dāng)前時間減去鍵的值對象的 lru 時間計(jì)算得出的:

redis> SET msg "hello world"
OK

# 等待一小段時間
redis> OBJECT IDLETIME msg
(integer) 20

# 等待一陣子
redis> OBJECT IDLETIME msg
(integer) 180

# 訪問 msg 鍵的值
redis> GET msg
"hello world"

# 鍵處于活躍狀態(tài),空轉(zhuǎn)時長為 0
redis> OBJECT IDLETIME msg
(integer) 0

注意

OBJECT IDLETIME 命令的實(shí)現(xiàn)是特殊的, 這個命令在訪問鍵的值對象時, 不會修改值對象的 lru 屬性。

除了可以被 OBJECT IDLETIME 命令打印出來之外, 鍵的空轉(zhuǎn)時長還有另外一項(xiàng)作用: 如果服務(wù)器打開了 maxmemory 選項(xiàng), 并且服務(wù)器用于回收內(nèi)存的算法為 volatile-lru 或者 allkeys-lru , 那么當(dāng)服務(wù)器占用的內(nèi)存數(shù)超過了 maxmemory 選項(xiàng)所設(shè)置的上限值時, 空轉(zhuǎn)時長較高的那部分鍵會優(yōu)先被服務(wù)器釋放, 從而回收內(nèi)存。

配置文件的 maxmemory 選項(xiàng)和 maxmemory-policy 選項(xiàng)的說明介紹了關(guān)于這方面的更多信息。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號