Redis儲存優化 小物件壓縮

2021-10-10 13:24:15 字數 2524 閱讀 4774

小物件壓縮

32bit vs 64bit

小物件壓縮

public

class

arraymap

}keys.

add(k)

; values.

add(v)

;return null;

}public v get

(k k)

}return null;

}public v delete

(k k)

}return null;

}}

新docker-redis:

0>hset hello a 1

"1"新docker-redis:

0>hset hello b 2

"1"新docker-redis:

0>object encoding hello

"ziplist"

新docker-redis:

0>zadd world 1 a

"1"新docker-redis:

0>zadd world 2 b

"1"新docker-redis:

新docker-redis:

0>sadd hello 1

2"2"

新docker-redis:

0>object encoding hello

"intset"

新docker-redis:

0>sadd hello yes no

"2"新docker-redis:

0>object encoding hello

"hashtable"

總結
hash

-max

-z 工pl 工 st entries 512 結構儲存 # hash 的元素個數超過 512 就必須用標準

hash

-max

-ziplist-value 64 超過 64 就必須用標準結構儲存 # hash 的任意元素的 key/value 的長度超過64 就必須用標準結構儲存

list

-max

-ziplist-entries 512 結構儲存 # list 的元素個數超過 512 就必須用標準結構儲存

list

-max

-z 工plist - value 64 用標準結構儲存 # list 的任意元素的長度超過 64 就必須用標準結構儲存

zset-

max-ziplist-entries 128 結構儲存 # zset 的元素個數超過 128 就必須用標準結構儲存

zset-

max- ziplist-value 64 用標準結構儲存 # zset 的任意元素的長度超過 64 就必須用標準結構儲存

set-

max-intset-entries 512 標準結構儲存 # set 的整數元素個數超過 512 就必須用標準結構儲存

public

static

void

main

(string[

] args)

system.out.

println

(jedis.

objectencoding

("books"))

; jedis.

hset

("books"

,"hello"

,"512");

system.out.

println

(jedis.

objectencoding

("books"))

;}//輸出如下:

ziplist

hashtable

記憶體**機制

記憶體分配演算法

jemalloc效能優於tcmalloc,redis預設使用jemalloc

新docker-redis:

0>info memory

"# memory

used_memory:

5110711968..

...mem_fragmentation_ratio:

1.33

mem_allocator:jemalloc-

4.0.3

active_defrag_running:

0lazyfree_pending_objects:

0

Redis小物件的壓縮儲存

redis hash是value內部為乙個hashmap,如果該map的成員數比較少,則會採用類似一維線性的緊湊格式來儲存該map,即省去了大量指標的記憶體開銷,這個引數控制對應在redis.conf配置檔案中下面2項 以上2個條件任意乙個條件超過設定值都會轉換成真正的hashmap,也就不會再節省...

Redis 小物件壓縮

redis 是乙個非常耗費記憶體的資料庫,它所有的資料都放在記憶體裡。如果我們不注意節約使用記憶體,redis 就會因為我們的無節制使用出現記憶體不足而崩潰。1 ziplist 是乙個緊湊的位元組陣列結構,每個元素直接都是緊挨著,資料結構如下圖 1 object encoding key 查詢key...

小物件壓縮

鑑於redis是純記憶體資料庫,為了盡可能的節省記憶體開銷避免因為記憶體不足而崩潰,redis對一部分資料結構進行了優化。編譯 如果使用32位進行編譯,內部所有資料結構所使用的指標空間占用會少一半,如果使用記憶體不超過4g,可以考慮使用32位進行編譯,如果不足還可以通過增加例項的方式來解決。壓縮 這...