七叶笔记 » 数据库 » 压缩Redis里的字符串大对象操作

压缩Redis里的字符串大对象操作

第二种,使用Zstd 输出

5KB

2020-09-08 22:42:48 INFO ConfigCacheUtil:157 - 初始数据: 5541 2020-09-08 22:42:48 INFO ConfigCacheUtil:163 - 压缩耗时: 2 2020-09-08 22:42:48 INFO ConfigCacheUtil:164 - 数据大小: 1236 2020-09-08 22:42:48 INFO ConfigCacheUtil:171 - 解压耗时: 2 2020-09-08 22:42:48 INFO ConfigCacheUtil:172 - 数据大小: 5541

2020-09-08 22:42:48 INFO ConfigCacheUtil:176 - 初始数据: 5541 2020-09-08 22:42:48 INFO ConfigCacheUtil:182 - 压缩耗时: 523 2020-09-08 22:42:48 INFO ConfigCacheUtil:183 - 数据大小: 972 2020-09-08 22:42:48 INFO ConfigCacheUtil:190 - 解压耗时: 85 2020-09-08 22:42:48 INFO ConfigCacheUtil:191 - 数据大小: 5541

2020-09-08 22:42:48 INFO ConfigCacheUtil:196 - 初始数据: 5541 2020-09-08 22:42:48 INFO ConfigCacheUtil:202 - 压缩耗时: 1 2020-09-08 22:42:48 INFO ConfigCacheUtil:203 - 数据大小: 919 2020-09-08 22:42:48 INFO ConfigCacheUtil:210 - 解压耗时: 22 2020-09-08 22:42:48 INFO ConfigCacheUtil:211 - 数据大小: 5541

6MB

2020-09-08 22:44:06 INFO ConfigCacheUtil:158 - 初始数据: 5719269 2020-09-08 22:44:06 INFO ConfigCacheUtil:164 - 压缩耗时: 129 2020-09-08 22:44:06 INFO ConfigCacheUtil:165 - 数据大小: 330090 2020-09-08 22:44:06 INFO ConfigCacheUtil:172 - 解压耗时: 69 2020-09-08 22:44:06 INFO ConfigCacheUtil:173 - 数据大小: 5719269

2020-09-08 22:44:06 INFO ConfigCacheUtil:177 - 初始数据: 5874139 2020-09-08 22:44:06 INFO ConfigCacheUtil:183 - 压缩耗时: 265 2020-09-08 22:44:06 INFO ConfigCacheUtil:184 - 数据大小: 201722 2020-09-08 22:44:06 INFO ConfigCacheUtil:191 - 解压耗时: 81 2020-09-08 22:44:06 INFO ConfigCacheUtil:192 - 数据大小: 5874139

2020-09-08 22:44:06 INFO ConfigCacheUtil:197 - 初始数据: 5874139 2020-09-08 22:44:06 INFO ConfigCacheUtil:203 - 压缩耗时: 42 2020-09-08 22:44:06 INFO ConfigCacheUtil:204 - 数据大小: 115423 2020-09-08 22:44:07 INFO ConfigCacheUtil:211 - 解压耗时: 49 2020-09-08 22:44:07 INFO ConfigCacheUtil:212 - 数据大小: 5874139

Redis 压缩列表

压缩列表(ziplist)是列表键和哈希键的底层实现之一。当一个列表键只包含少量列表项,并且每个列表项要么就是小整数值,要么就是长度比较短的字符串,Redis就会使用压缩列表来做列表键的底层实现。

下面看一下压缩列表实现的列表键:

列表键里面包含的都是1、3、5、10086这样的小整数值,以及'hello'、'world'这样的短字符串。

再看一下压缩列表实现的哈希键:

压缩列表是Redis为了节约内存而开发的,是一系列特殊编码的连续内存块组成的顺序型数据结构。

一个压缩列表可以包含任意多个节点,每个节点可以保存一个字节数组或者一个整数值。

看一下压缩列表的示例:

看一下包含五个节点的压缩列表:

节点的encoding属性记录了节点的content属性所保存数据的类型以及长度。

节点的content属性负责保存节点的值,节点值可以是一个字节数组或者整数,值的类型和长度由节点的encoding属性决定。

连锁更新:

每个节点的previous_entry_length属性都记录了前一个节点的长度,那么当前一个节点的长度从254以下变成254以上时,本节点的存储前一个节点的长度的previous_entry_length就需要从1字节变为5字节。

那么后面的节点的previous_entry_length属性也有可能更新。不过连锁更新的几率并不大。

总结:

以上为个人经验,希望能给大家一个参考,也希望大家多多支持七叶笔记。

相关文章