redis 記憶體淘汰機制等知識

2021-10-23 21:49:14 字數 1199 閱讀 7803

再說說redis,redis有兩種key。

了解上面的情況後,我們兩兩組合就可以得知3種redis記憶體**策略。

(沒有ttl的key沒有臨近過期的說法)

其中**演算法才是精髓,至於redis的ttl只是看我們如何定位redis的角色,理論上應該把redis看作是快取,然後對所有key設定ttl。

redis還有一種極端的做法,就是不允許**記憶體,一旦記憶體不足

(usememory接近maxmemory),申請記憶體就會拋異常。

redis提供了下面幾種淘汰策略

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)中任意選擇資料淘汰

noeviction:禁止驅逐資料,當記憶體使用達到閾值的時候,所有引起申請記憶體的命令會報錯

常用效能指標,use_memory,use_memory_rss, mem_fragmentation_ratio,maxmemory-policy,evicted_keys.

當開啟並觸發快照功能時,redis會fork乙個子程序把當前記憶體中的資料完全複製乙份寫入到硬碟上。

total_commands_processed 字段顯示了redis服務處理命令的總數

由於redis是單執行緒執行命令,如果出現慢查詢,那麼後面的命令會被阻塞,導致total_commands_processed欄位增速下降,redis響應超時。

lpush、mset等批命令效能比lset這種每次新增一次的命令要快(因為redis單執行緒)。

pipeline可以減少網路延遲,可以提速數百倍。

Redis 記憶體淘汰機制

摘要redis是一款優秀的 開源的記憶體資料庫,我在閱讀redis原始碼實現的過程中,時時刻刻能感受到redis作者為更好地使用記憶體而費盡各種心思,例如最明顯的是對於同一種資料結構在不同應用場景下提供了基於不同底層編碼的實現 如壓縮列表 跳躍表等 今天我們暫時放下對redis不同資料結構的 來一起...

redis 記憶體淘汰機制

redis記憶體淘汰指的是使用者儲存的一些鍵被可以被redis主動地從例項中刪除,從而產生讀miss的情況,那麼redis為什麼要有這種功能?這就是我們需要 的設計初衷。redis最常見的兩種應用場景為快取和持久儲存,首先要明確的乙個問題是記憶體淘汰策略更適合於那種場景?是持久儲存還是快取?記憶體的...

redis記憶體淘汰機制

redis記憶體淘汰 指的是使用者儲存的一些鍵被可以被redis 主動地 從例項中刪除,從而產生讀miss的情況,那麼redis為什麼要有這種功能?這就是我們需要 的設計初衷。redis最常見的兩種應用場景為 快取和 持久儲存 首先要明確的乙個問題是記憶體淘汰策略更適合於那種場景?是持久儲存還是快取...