在 redis 中,允許使用者設定最大使用記憶體大小 server.maxmemory,在記憶體限定的情況下是很有用的。譬如,在一台 8g 機子上部署了 4 個 redis 服務點,每乙個服務點分配 1.5g 的記憶體大小,減少記憶體緊張的情況,由此獲取更為穩健的服務。
redis 記憶體資料集大小上公升到一定大小的時候,就會施行資料淘汰策略。redis 提供 6種資料淘汰策略:
volatile-lru:從已設定過期時間的資料集(server.db[i].expires)中挑選最近最少使用的資料淘汰
volatile-ttl:從已設定過期時間的資料集(server.db[i].expires)中挑選將要過期的資料淘汰
volatile-random:從已設定過期時間的資料集(server.db[i].expires)中任意選擇資料淘汰
allkeys-lru:從資料集(server.db[i].dict)中挑選最近最少使用的資料淘汰
allkeys-random:從資料集(server.db[i].dict)中任意選擇資料淘汰
no-enviction(驅逐):禁止驅逐資料
redis 確定驅逐某個鍵值對後,會刪除這個資料並,並將這個資料變更訊息發布到本地(aof 持久化)和從機(主從連線)。
在伺服器配置中儲存了 lru 計數器 server.lrulock,會定時(redis 定時程式 servercorn())更新,server.lrulock 的值是根據 server.unixtime 計算出來的。
另外,從 struct redisobject 中可以發現,每乙個 redis 物件都會設定相應的 lru。可以想象的是,每一次訪問資料的時候,會更新 redisobject.lru。
lru 資料淘汰機制是這樣的:在資料集中隨機挑選幾個鍵值對,取出其中 lru 最大的鍵值對淘汰。所以,你會發現,redis 並不是保證取得所有資料集中最近最少使用(lru)的鍵值對,而只是隨機挑選的幾個鍵值對中的。
redis 資料集資料結構中儲存了鍵值對過期時間的表,即 redisdb.expires。和 lru 資料淘汰機制類似,ttl 資料淘汰機制是這樣的:從過期時間的表中隨機挑選幾個鍵值對,取出其中 ttl 最大的鍵值對淘汰。同樣你會發現,redis 並不是保證取得所有過期時間的表中最快過期的鍵值對,而只是隨機挑選的幾個鍵值對中的。
redis 每服務客戶端執行乙個命令的時候,會檢測使用的記憶體是否超額。如果超額,即進行資料淘汰
redis資料淘汰策略
在 redis 中,允許使用者設定最大使用記憶體大小 server.maxmemory,在記憶體限定的情況下是很有用的。譬如,在一台 8g 機子上部署了 4 個 redis 服務點,每乙個服務點分配 1.5g 的記憶體大小,減少記憶體緊張的情況,由此獲取更為穩健的服務。redis 記憶體資料集大小上...
redis資料淘汰策略
redis 每服務客戶端執行乙個命令的時候,會檢測使用的記憶體是否超額。如果超額,即進行資料淘汰。在 redis 中,允許使用者設定最大使用記憶體大小 server.maxmemory,在記憶體限定的情況下是很有用的。譬如,在一台 8g 機子上部署了 4 個 redis 服務點,每乙個服務點分配 1...
redis資料淘汰策略
在 redis 中,允許使用者設定最大使用記憶體大小 server.maxmemory,在記憶體限定的情況下是很有用的。譬如,在一台 8g 機子上部署了 4 個 redis 服務點,每乙個服務點分配 1.5g 的記憶體大小,減少記憶體緊張的情況,由此獲取更為穩健的服務。redis 記憶體資料集大小上...