Redis簡單介紹 記憶體優化

2021-10-06 16:38:35 字數 1890 閱讀 8010

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...