Структура хэша Redis занимает больше памяти в режиме кластера - PullRequest
10 голосов
/ 12 мая 2019

Hash:

./redis-cli -c -p 7000 hlen 0
(integer) 7746812

./redis-cli -c -p 7000 hlen 1
(integer) 7746812

./redis-cli -c -p 7000 hlen 2
(integer) 7746812

./redis-cli -c -p 7000 hlen 3
(integer) 7746812

./redis-cli -c -p 7000 hlen 4
(integer) 7746812

./redis-cli -c -p 7000 hlen 5
(integer) 0

Память для каждого хеша:

./redis-cli -c -p 7000 keys '*'
1) "3"

./redis-cli -c -p 7000 memory usage 3
(integer) 415715543

./redis-cli -c -p 7001 keys '*'
1) "2"
2) "1"

использование памяти для каждой клавиши:

./redis-cli -c -p 7001 memory usage 1
(integer) 415715543

./redis-cli -c -p 7001 memory usage 2
(integer) 415715543

./redis-cli -c -p 7002 memory usage 0
(integer) 415715543

./redis-cli -c -p 7002 memory usage 4
(integer) 415715543

Уровень кластера использования памяти:

    ./redis-cli -c -p 7001 info memory
# Memory
used_memory:1004513344
used_memory_human:**957.98M**
used_memory_rss:1030799360
used_memory_rss_human:983.05M
used_memory_peak:1004615496
used_memory_peak_human:958.08M
used_memory_peak_perc:99.99%
used_memory_overhead:2568042
used_memory_startup:1449576
used_memory_dataset:1001945302
used_memory_dataset_perc:99.89%
allocator_allocated:1004619400
allocator_active:1004859392
allocator_resident:1022844928
total_system_memory:75798228992
total_system_memory_human:70.59G
used_memory_lua:37888
used_memory_lua_human:37.00K
used_memory_scripts:0
used_memory_scripts_human:0B
number_of_cached_scripts:0
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
allocator_frag_ratio:1.00
allocator_frag_bytes:239992
allocator_rss_ratio:1.02
allocator_rss_bytes:17985536
rss_overhead_ratio:1.01
rss_overhead_bytes:7954432
mem_fragmentation_ratio:1.03
mem_fragmentation_bytes:26347944
mem_not_counted_for_evict:3162
mem_replication_backlog:1048576
mem_clients_slaves:16922
mem_clients_normal:49694
mem_aof_buffer:3162
mem_allocator:jemalloc-5.1.0
active_defrag_running:0
lazyfree_pending_objects:0

То же самое для узла 7002 И 480 МБ для узла 7000, который имеет только один хэш.

Вопрос:

Каждый хеш занимает 415 МБ

Но почему используемая память составляет 480 МБ для одного хеша и 958 МБ для 2 хешей.

Я распечатал список ключей также в том же кластере.

Расчеты не учитываются правильно.

Что мне здесь не хватает? Добрый совет.

Это не из-за , это также. Я сделал чистку памяти. После этого память остается прежней.

1 Ответ

1 голос
/ 16 мая 2019

Redis имеет внутреннюю структуру, которая занимает память помимо имен и значений.В Redis он называется «Память над головой».

Это причина изменения памяти для хэша и кластера.

Мы можем использовать ziplist для повышения эффективности использования хеш-памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...