当一亿张图片保存信息,用了6.4GB,Redis大内存实例生成 RDB 响应变慢的问题。
因为String类型的数据结构,在保存数据时消耗的内存空间较多。额外开销较大。
采用二级编码的方法,实现了用集合类型保存单键值对,Redis实例的内存空间消耗下降。
为什么String的额外开销较大?String类型保存图片和图片存储对象ID平均采用了64字节,而实际long类型只需要8字节,两个long = 16字节,为什么String却采用了64字节保存?
为什么 String 类型内存开销大?
为什么用 String 类型保存图片 ID 和图片存储对象 ID 时需要用 64 个字节?即,两个String(key-value)占用64字节?
16(原来数据) + 8 (len)+ 8(alloc) + 32(DictEntry)
DictEntry中,全局哈希表的哈希桶32B(*key + *value + *next = 8 + 8 + 8 =24,但是jemalloc内存分配库会分配大于24且最接近N的2的幂次数作为分配空间即使2^5=32B) ,实际数据的key的RedisObject 1