Reids大key優化

byds520發表於2020-10-23

現象:

1、單個簡單的key儲存的value很大

2、hash, set,zset,list 中儲存過多的元素

3、一個叢集儲存了上億的key

問題:

1,讀寫bigkey會導致超時嚴重,甚至阻塞服務

2,大key相關的刪除或者自動過期時,會出現qps突降或者突升的情況,極端情況下,會造成主從複製異常,Redis服務阻塞無法響應請求

解決方式

1,拆分物件:將物件拆分成多個key-value,使用multiGet獲取值,這樣分拆意義在於分拆操作的壓力,將操作壓力平攤到多個redis例項,降低對於單個redis的io壓力。

或者分拆成幾個key-value, 也可以將這個儲存在一個hash中,每個field代表一個具體的屬性,使用hget,hmget來獲取部分的value,使用hset,hmset來更新部分屬性。

2,對儲存元素按一定規則進行分類, 分散儲存到多個redis例項中

3,只快取經常訪問的資料,而不是全部都做,80、20規則

4,降低key大小

5,減少key個數可以減少對記憶體的消耗,可以參考hash結構儲存,將多個key儲存在一個hash結構中

使用Bloom的場景往往是資料量極大的情況,這種情況下,bitmap和bloom使用空間比較大。

如果bitmap比較大,可以拆分成多個小的bitmap,可以通過結合hash方式,將key路由到hash上對應的bitmap上,將不同的key分配給不同的bitmap。

 

相關文章