字符串优化
字符串预分配每次并不都是翻倍扩容,空间预分配规则如下:
- 第一次创建len属性等于数据实际大 小,free等于0,不做预分配。
- 修改后如果已有free空间不够且数据小于1M,每次预分配一倍容量。 如原有len=60byte,free=0,再追加60byte,预分配120byte,总占用空间:60byte+60byte+120byte +1byte。
- 修改后如果已有free空间不够且数据大于1MB,每次预分配1MB数据。如原有len=30MB, free=0,当再追加100byte,预分配1MB,总占用空间:1MB+100byte+1MB+1byte。
尽量减少字符串频繁修改操作如append
、setrange
,改为直接使用set
修改字符串,降低预分配带来的内 存浪费和内存碎片化。
字符串重构
字符串重构:指不一定把每份数据作为字符串整体存储,像json这样的数据可以使用hash结构,使用二级结构存储也能帮我们节省内存。
编码优化
1)使用ziplist
可以分别作为hash
、list
、zset
数据类型实现。
2)使用ziplist
编码类型可以大幅降低内存占用。
3)ziplist
实现的数据类型相比原生结构,命令操作更加耗时,不同类型耗时排序:list < hash < zset
。
控制键的数量
对于大量小对象的存储场景,非常适合使用ziplist编码的hash类型控制键的规模来降低内存。