【问题标题】:Redis hash structure occupies more memory in cluster modeRedis hash结构在集群模式下占用内存较多
【发布时间】:2019-05-12 15:58:21
【问题描述】:

哈希:

./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 和 2 个哈希使用 958MB 的内存。

我也在同一个集群中打印了键列表。

计算不正确。

我在这里缺少什么?请多多指教。

也不是因为this。我做了内存清除。之后,内存也保持不变。

【问题讨论】:

    标签: redis


    【解决方案1】:

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

    这就是哈希和集群内存变化的原因。

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

    【讨论】: