【Redis】保存一亿张图片,如果利用redis的底层数据结构进行优化,使占用内存空间少?

文章探讨了Redis中String类型存储图片信息导致内存开销大的问题,提出采用压缩列表和二级编码的Hash类型来优化内存占用。通过详细分析String额外开销的原因,介绍了压缩列表如何节省空间,并解释了如何使用Hash类型和二级编码策略来保存单值键值对,以降低内存消耗。
摘要由CSDN通过智能技术生成

当一亿张图片保存信息,用了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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值