了解Redis中密钥的内存消耗

时间:2018-12-12 08:08:01

标签: redis

我正在运行本地Redis服务器。 Redis的一个坏键占用了很多内存。在删除该键之前,“信息内存”显示的内存为5.3GB。 该错误密钥占用了大约800MB的数据。这是基于“调试对象”的输出。

删除该键后,释放的内存几乎是该大小的两倍。预期只有800MB左右。

关于这背后的原因有什么想法? 在ubuntu上运行。

127.0.0.1:6379[3]> info
# Server
redis_version:2.8.9

127.0.0.1:6379[3]> info memory
# Memory
used_memory:5746884728
used_memory_human:5.35G
used_memory_rss:6382206976
used_memory_peak:8865352096
used_memory_peak_human:8.26G
used_memory_lua:37888
mem_fragmentation_ratio:1.11
mem_allocator:jemalloc-3.2.0

127.0.0.1:6379[3]> debug object c43d3e42-7e63-47f3-bb63-b58a897c29a6
Value at:0x7f77a1db1d10 refcount:1 encoding:linkedlist 
serializedlength:814237852 lru:994050 lru_seconds_idle:99559
(5.53s)


127.0.0.1:6379[3]> del c43d3e42-7e63-47f3-bb63-b58a897c29a6
(integer) 1
(1.78s)

127.0.0.1:6379[3]> info memory
# Memory
used_memory:4145366968
used_memory_human:3.86G
used_memory_rss:4375691264
used_memory_peak:8865352096
used_memory_peak_human:8.26G
used_memory_lua:37888
mem_fragmentation_ratio:1.06
mem_allocator:jemalloc-3.2.0

谢谢。

1 个答案:

答案 0 :(得分:5)

DEBUG OBJECT向您显示对象的 序列化长度 。以RDB格式将对象保存在磁盘上时,它是序列化数据的大小。不是内存中对象的大小。

在磁盘上保存数据时,Redis可能会压缩数据。因此,通常情况下,序列化的长度要小于内存中对象的大小。