分别往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 使用了数据结构其中存储有其他一些内容,可以没法和直接存储在文本文件中的大小进行比较