redis是一種基於記憶體的資料儲存,記憶體的大小決定redis的容量,在redis的使用過程中,可以使用一些技巧,減少記憶體的消耗,增大redis的可用容量
redis的記憶體管理:
一、redis記憶體設定
1、maxmemory 最大記憶體限制
設定記憶體使用限制, 當redis到達記憶體使用限制時,將根據淘汰策略刪除key,如果redis不能刪除key得到足夠的記憶體,將丟擲錯誤。預設情況下該配置不設定,使用os記憶體。
2、maxmemory-policy noeviction redis淘汰機制
策略描述
volatile-lru
用近似lru策略從expire key集合中刪除key
allkeys-lru
用近似lru策略從全部 key集合中刪除key
volatile-random
從expire key集合中隨機刪除key
allkeys-random
從全部 key集合中隨機刪除key
volatile-ttl
刪除最近過期時間的key(更小ttl)
noeviction
不選擇淘汰key 返回乙個錯誤
3、maxmemory-samples 5 精度設定
lru、lfu和最小ttl演算法不是精確演算法,而是近似演算法(為了節省記憶體),因此可以調整它的速度或精度。預設情況下,redis將檢查五個key並選擇最近使用較少的鍵,可以使用配置指令更改樣本大小。
預設值5產生足夠好的結果。10非常接近真實的lru,但需要更多的cpu。3更快,但不太準確。
二、盡可能的使用hash
redis對內部資料型別的儲存做了優化,當使用hash、list、set和zset時,redis提供了一些配置引數,在這些條件下,redis會自動為這些資料型別進行編碼以縮小記憶體的使用。
資料型別
配置描述
hash
hash-max-ziplist-entries 512
當雜湊有少量的條目,並且最大的條目不超過給定的閾值時,使用記憶體高效的資料結構對其進行編碼。
hash-max-ziplist-value 64(bytes)
list
list-max-ziplist-size -2
list可以通過該配置進行編碼,當是負數時,代表指定的閥值是list的記憶體大小,預設是-2
# -5: max size: 64 kb <-- not recommended for normal workloads
# -4: max size: 32 kb <-- not recommended
# -3: max size: 16 kb <-- probably not recommended
# -2: max size: 8 kb <-- good
# -1: max size: 4 kb <-- good
當配置是正數是,代表list元素的個數
list-compress-depth 0
0 禁止所有的list壓縮
1 深度為1意味著不壓縮頭和尾:so: [head]->node->node->...->node->[tail]
2 深度為2 [head]->[next]->node->node->...->node->[prev]->[tail]
3: [head]->[next]->[next]->node->node->...->node->[prev]->[prev]->[tail]
setset-max-intset-entries 512
當集合全部是正數元素時,會對集合進行特殊編碼
zset
zset-max-ziplist-entries 128
同hash
zset-max-ziplist-value 64
同hash
Redis教程 十四 記憶體優化介紹
這篇文章主要介紹了redis教程 十四 記憶體優化介紹,本文講解了特殊編碼 bit和byte級別的操作 盡可能使用hash等內容,需要的朋友可以參考下 一 特殊編碼 undefined 自從redis 2.2之後,很多資料型別都可以通過特殊編碼的方式來進行儲存空間的優化。其中,hash list和由...
Redis 記憶體優化
非常感謝 redis內部有很多的資料型別,這些在官方文件上都可以看到,下面是其內部優化的一些細節點 1.string 和 數字,在redis中如果儲存的是 123 redis是能夠識別出來這是乙個數字並且按照數字來儲存,節省儲存空間,當然除了這個優化之外,redis內部會構建乙個數字池,預設是100...
redis記憶體優化
在資料量小或者只有int資料的時候,redis採用更緊湊的資料結構來儲存資料 zset hash ziplist set int intset 這些特殊的資料結構是一整塊記憶體,避免來記憶體分片,節省了記憶體,並且增加了cache命中,所以雖然演算法複雜度變成了on,但其實更快了 對於只需要flag...