redis占用内存的疑问

查看:85
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆