對象的定義:
每種類型的對象至少有兩種不同的編碼(數據結構)實現。
我們主要是意識到,既然有不同類型的對象,有些命令可以用於不同的對象,比如GET、TTL、EXPIRE等。,而其他的只能用於特定的類型。
對於特定類型的命令,您將首先檢查redisObject.type字段以驗證特定類型。
這些常見的命令類型是通過類型的多態性實現的。也就是說,不同的方法被用來在不同類型的對象上實現壹個命令。使用命令時,只需要根據對象的類型判斷使用什麽函數進行操作。這就是多態性。
type對象上有壹個計數字段refcount,對象每次被引用計數+1,每次被取消計數-1。通過這種機制,可以在適當的時候實現內存回收。這是通過引用計數來回收內存的方法。
在Redis中,默認情況下,從0到9999的數字數據將在內存中共享。也就是內存中只有壹個這樣的對象,妳只需要在不同的使用場所指向它。
問:為什麽Redis只享受整數值的對象?
答:使用* * *共享對象時,需要驗證對象是否與* * *共享對象壹致,數據越復雜,復雜度越高。整數值的驗證運算復雜度為O(1);字符串驗證操作的復雜度為O(n);當驗證具有多個值的對象時,比如列表或散列,復雜度是O(N?)。為了節省CPU,做了這個限制。
redisObject.lru屬性記錄最後壹次訪問的時間。妳可以通過OBJECT IDLETIME xxx的命令來檢查妳有多久沒有訪問這個元素了(curTime-lru)。該命令本身不會更新lru。