redis - Redis 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 相同,只有一个哈希的节点 7000 为 480MB。
问题:
每个哈希占用 415MB
但是为什么使用的内存是 480MB 用于一个哈希,而 958MB 用于 2 个哈希。
我也在同一个集群中打印了键列表。
计算不正确。
我在这里想念什么?好心劝告。
也不是因为这个。我做了内存清除。在那之后,记忆也保持不变。
解决方案
Redis 具有内部结构,除了名称和值之外,它还占用内存。在redis中称为“内存开销”。
这是散列和集群的内存更改的原因。
我们可以利用ziplist
它来提高哈希内存的效率。
推荐阅读
- amazon-web-services - 如何调试 aws 胶水 pyspark 作业
- python - 回到 start 函数会停止脚本
- cluster-analysis - 需要在 h5 人群密度图文件中找到集群及其质心
- thunderbird - 如何更改 Thunderbird 电子邮件视图
- typeorm - EntityMetadataNotFoundError:在 TypeORM 中使用类时未找到“用户”的元数据
- arrays - 如何使用vba循环多个数组并显示值?
- assembly - 未解决的符号仍然存在 Code composer studio
- java - 为什么java 8中MaxMetaSpaceSize的默认值为18446744073709486080?
- java - 如何为相同的键迭代 2 个哈希图并将键和两个值添加到对象
- azure-devops - Azure Function 的 Azure Devops CI 无法构建。奇怪的编译错误