首頁  >  文章  >  資料庫  >  redis記憶體滿了怎麼解決

redis記憶體滿了怎麼解決

尚
原創
2019-07-05 15:13:306646瀏覽

redis記憶體滿了怎麼解決

redis記憶體滿了解決方法:

1,增加記憶體。

2,使用記憶體淘汰策略。

3,Redis集群。

重點介紹下2、3:

第二點:

我們知道,redis設定設定檔的maxmemory參數,可以控制其最大可用記憶體大小(位元組)。

那麼當所需內存,超過maxmemory怎麼辦?

這時候就該設定檔中的maxmemory-policy出​​場了。

其預設值是noeviction。

下面我將列出當可用記憶體不足時,刪除redis鍵具有的淘汰規則。

規則說明:

1、volatile-lru

使用LRU演算法刪除一個鍵(只對設定了生存時間的鍵)

2、 allkeys-lru

使用LRU演算法刪除一個鍵

3、volatile-random

隨機刪除一個鍵(只對設定了生存時間的鍵)

4、allkeys-random

隨機刪除一個鍵

5、volatile-ttl

刪除生存時間最近的一個鍵

6、noeviction

不刪除鍵,只回傳錯誤

LRU演算法,least RecentlyUsed,最近最少使用演算法。也就是說預設刪除最近最少使用的鍵。

但是一定要注意一點! redis中並不會準確的刪除所有鍵中最近最少使用的鍵,而是隨機抽取3個鍵,刪除這三個鍵中最近最少使用的鍵。

那麼3這個數字也是可以設定的,對應位置是設定檔中的maxmeory-samples.

三、叢集怎麼做

Redis只支援單一實例,內存一般最多10~20GB。對於內存動輒100~200GB的系統,就需要透過叢集來支援了。

Redis叢集有三種方式:客戶端分片、代理分片、RedisCluster(在之後一篇文章詳細說一下。)

1、客戶端分片

透過業務代碼自行實現路由

優勢:可以自行控制分片演算法、效能比代理的好

劣勢:維護成本高、擴容/縮容等維運操作都需要自己研發

2、代理程式分片

代理程式接收到來自業務程式的資料請求,根據路由規則,將這些請求分發給正確的Redis實例並傳回給業務程式。使用類似Twemproxy、Codis等中間件實作。

優點:運作方便、程式不用關心如何連結Redis實例

劣勢:會帶來效能消耗(大概20%)、無法平滑擴充/縮容,需要執行腳本遷移數據,不方便(Codis在Twemproxy基礎上優化並實現了預分片來達到Auto Rebalance)。

3、Redis Cluster

優點:官方叢集解決方案、無中心節點,和客戶端直連,效能較好

劣勢:方案太重、無法平滑擴容/縮容,需要執行對應的腳本,不方便、太新,沒有相應成熟的解決案例

更多Redis相關知識,請訪問Redis使用教程欄目!

以上是redis記憶體滿了怎麼解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:redis怎麼配置下一篇:redis怎麼配置