天天看點

redis-4.0新功能介紹

阿裡雲redis4.0引擎是以社群4.0為基礎,合入大量阿裡雲開發的特性以及bugfix後全新推出的售賣版本。除了擁有redis-2.8引擎所具備的所有優勢之外,還帶來了很多新功能。

Lazyfree

redis-4.0帶來的Lazyfree機制可以避免del,flushdb/flushall,rename等指令引起的redis-server阻塞,提高服務穩定性。

unlink

在redis-4.0之前,redis執行del指令會在釋放掉key的所有記憶體以後才會傳回OK,這在key比較大的時候(比如說一個hash裡頭有1000W條資料),其他連接配接可能要等待很久。為了相容已有的del語義,redis-4.0引入unlink指令,效果以及用法和del完全一樣,但記憶體釋放動作放到背景線程中執行。

UNLINK key [key ...]
           

flushdb/flushall

flushdb/flushall在redis-4.0中新引入了選項,可以指定是否使用Lazyfree的方式來清空整個記憶體。

FLUSHALL [ASYNC]
FLUSHDB [ASYNC]
           

rename

執行 rename oldkey newkey 時,如果newkey已經存在,redis會先删除,這也會引發上面提到的删除大key問題,如果想讓redis在這種場景下也使用lazyfree的方式來删除,可以在控制台上打開如下配置:我有幾張阿裡雲幸運券分享給你,用券購買或者更新阿裡雲相應産品會有特惠驚喜哦!把想要買的産品的幸運券都領走吧!快下手,馬上就要搶光了。

lazyfree-lazy-server-del yes/no
           

其他場景

某些使用者對資料設定過期時間,依賴redis的淘汰機制去删除已經過期的資料,這同樣也存在上面提到的問題,淘汰某個大key會導緻程序CPU出現抖動,redis-4.0提供了兩個配置,可以讓redis在淘汰或者逐出資料時也使用lazyfree的方式。

lazyfree-lazy-eviction yes/no
lazyfree-lazy-expire yes/no
           

LFU&hotkey

redis-4.0新增了 allkey-lfu 和 volatile-lfu 兩種資料逐出政策,同時還可以通過object指令來擷取某個key的通路頻度。

基于LFU機制,使用者可以使用 scan + object freq 來發現熱點key,當然redis也一起釋出了更好用的工具——redis-cli,使用執行個體如下所示。

原文連結