大家在用redis做緩存資料的時候有沒有估算過整個緩存使用了多少空間呢?如果緩存資料的大小超過了整個redis的記憶體大小,又會有什麼情況發生呢?
在redis中,我們是可以去設定最大使用記憶體大小server.maxmemory的,當redis記憶體資料集大小上升到一定程度的時候,就會施行資料淘汰機制。Redis提供了一下6種資料淘汰機制
LRU機制:
redis儲存了lru計數器server.lrulock,會定時的去更新(redis定時程式severCorn()),每個redis對象都會設定相應的lru值,每次通路對象的時候,redis都會更新redisObject.lru。
LRU淘汰機制:在資料集中随機挑選幾個鍵值對,取出其中lru最大的鍵值對淘汰。是以,redis并不能保證淘汰的資料都是最近最少使用的,而是随機挑選的鍵值對中的。
TTL機制:redis資料集結構中儲存了鍵值對過期時間表,即 redisDb.expires。
TTL淘汰機制:在資料集中随機挑選幾個鍵值對,取出其中最接近過期時間的鍵值對淘汰。是以,redis并不能保證淘汰的資料都是最接近過期時間的,而是随機挑選的鍵值對中的。
redis在每服務用戶端執行一個指令的時候,會檢測使用的記憶體是否超額