在群集模式下,Redis哈希结构占用更多内存

时间:2019-05-12 15:58:22

标签: redis

哈希:

./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相同 对于只有一个哈希的节点7000,则为480MB。

问题:

每个哈希需要415MB

但是为什么使用的内存是一个哈希为480MB,两个哈希为958MB。

我也在同一集群中打印了密钥列表。

计算结果不正确。

我在这里想念什么?请指教。

这也不是因为this。我做了记忆清除。此后,内存仍然保持不变。

1 个答案:

答案 0 :(得分:1)

Redis具有内部结构,除了名称和值外,它还占用内存。在redis中称为“内存开销”。

这是哈希和群集的内存更改的原因。

我们可以利用ziplist来提高哈希存储的效率。