redis占用内存的疑问
本文介绍了redis占用内存的疑问的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
分别往27个set结构里面添加10万个 df04e 类似这样的字符。每个字符串长度大概是5。
结果一看内存占用,8MB多。
# Memory
used_memory:8963776
used_memory_human:8.55M
used_memory_rss:21229568
used_memory_rss_human:20.25M
used_memory_peak:75501696
used_memory_peak_human:72.00M
total_system_memory:8589934592
total_system_memory_human:8.00G
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:2.37
mem_allocator:libc
我把那些长度5的字符串的,10万个,连起来,然后写入一个文本里面,大概500KB。为啥到了redis,占用了8MB,这是为什么呢?
我把10万个 5969b4ba18c9add4a9d5f5a1 这样的字符串,每个字符串长度24,插入到一个set结构里面,结果内存占用10MB。与上面相差无几。这到底怎么回事?
我后来改成list结构,占了大概0.5MB左右。符合了真实的空间占用。是否set在分配内存的时候跟list结构有差异???
但是实际情况,我却不可能使用list替代set结构。
解决方案
这个和redis的内部编码机制有关,你可以尝试将其拆分为多个key,每个key存放512条数据,这样应该会减少不少缓存
redis 使用了数据结构其中存储有其他一些内容,可以没法和直接存储在文本文件中的大小进行比较
这篇关于redis占用内存的疑问的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文