最佳化Redis記憶體的9個要點,redis要點
最佳化Redis記憶體的9個要點
1.注意在redis.conf中的小彙總資料類型的特殊編碼設定:
hash-max-zipmap-entries 64 (hash-max-ziplist-entries for Redis >= 2.6)
hash-max-zipmap-value 512 (hash-max-ziplist-value for Redis >= 2.6)
list-max-ziplist-entries 512
list-max-ziplist-value 64
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
set-max-intset-entries 512
2.使用32位執行個體將記憶體受限在4G內,不過他們的RDB和AOF檔案是相容在32位和64位下去切換使用的。
3。使用bit位層級操作和byte位元組層級操作來減少不必要的記憶體使用量
bit位層級操作:GETRANGE, SETRANGE, GETBIT and SETBIT
byte位元組層級操作:GETRANGE and SETRANGE
4.儘可能地使用hashes雜湊,因為小Hashes會被編碼成一個非常小的空間。
5.使用雜湊來在Redis的頂部在普通key-value儲存上來抽象記憶體使用量效率
6.關於記憶體配置:
如果maxmemory沒有設定的Redis會繼續分配記憶體,因為它認為合適的,因此它可以(逐漸)吃了你的全部可用記憶體。因此,通常建議配置一些限制。您可能還需要設定maxmemory策略,以noeviction(這不是在一些舊版本的Redis的預設值)。
這使得Redis的返回記憶體不足的錯誤寫命令,如果當它到達了極限 - 這反過來可能會導致應用程式錯誤,但不會導致因為記憶體饑餓而整機死亡。
另外redis 的6種到期策略redis 中的預設的到期策略是volatile-lru 。設定方式
config set maxmemory-policy volatile-lru
maxmemory-policy 六種方式
volatile-lru:只對設定了到期時間的key進行LRU(預設值)
allkeys-lru : 是從所有key裡 刪除 不經常使用的key
volatile-random:隨機刪除即將到期key
allkeys-random:隨機刪除
volatile-ttl : 刪除即將到期的
noeviction : 永不到期,返回錯誤
maxmemory-samples 3 是說每次進行淘汰的時候 會隨機抽取3個key 從裡面淘汰最不經常使用的(預設選項)
7. 在存到Redis之前先把你的資料壓縮下
8.盡量使用短的鍵(Keys)
9.使用Hashes值儲存而不帶額外的資料元 參考:
http://redis.io/topics/memory-optimization
http://baike.baidu.com/link?url=eb4_JlCybpp1AuRHHBd8GmZdftrAUa-FSc_Y6hFujHejnGb_AHLxteQRacXonNYoaJmbigEyb3yBe_z67gzI9a
http://labs.octivi.com/how-we-cut-down-memory-usage-by-82/