Redis 7内存优化--1.简化dict数据结构

vincent0809
发布于 2022-4-14 15:29
浏览
0收藏

dict是Redis的基础数据结构,Redis的键值、hash|set|zset数据结构均用到了dict。本文介绍了Redis7在dict上的优化,思路清晰简单但效果明显,值得重点关注(降本增效)。Redis 7内存优化--1.简化dict数据结构-鸿蒙开发者社区

一、优化前的dict结构


7.0之前:dict内部包含了两个dictht

Redis 7内存优化--1.简化dict数据结构-鸿蒙开发者社区相关代码:

Redis 7内存优化--1.简化dict数据结构-鸿蒙开发者社区

二、Redis 7.0的相关优化


• 去掉privdata
• 去掉dictht,相关元数据放到了dict中。

Redis 7内存优化--1.简化dict数据结构-鸿蒙开发者社区相关代码变为:

Redis 7内存优化--1.简化dict数据结构-鸿蒙开发者社区

 

• dictht ht[2]用dictEntry **ht_table[2]代替


• 原来两个dictht的used用unsigned long ht_used[2]代替


• 原来两个dictht的size用signed char ht_size_exp[2]代替,且由8个字节变为1个字节,计算方法如下:

Redis 7内存优化--1.简化dict数据结构-鸿蒙开发者社区

三、效果:


通过数据结构的优化(96->56字节),必然会在hash|set|zset key较多且为小value时,效果更为明显。由于要对单一功能进行测试,所以这里直接使用PR中的测试结果(https://github.com/redis/redis/pull/9228),

 

(1) 内存优化:提升较为明显

Redis 7内存优化--1.简化dict数据结构-鸿蒙开发者社区(2) 性能变化:除了get random keys外,其他整体有提升。

Redis 7内存优化--1.简化dict数据结构-鸿蒙开发者社区四、总结:


这个优化思路清晰,把Redis的基础数据结构dict进行优化,因此会在内存优化上有很大效果,值得学习和使用。

 

文章转自公众号:Redis开发运维实战

分类
标签
收藏
回复
举报
回复
    相关推荐