教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 redis list操作_闲扯Redis四 : List数据类型底层编码转换

redis list操作_闲扯Redis四 : List数据类型底层编码转换

发布时间:2022-03-06   编辑:jiaochengji.com
教程集为您提供redis list操作,闲扯Redis四 : List数据类型底层编码转换等资源,欢迎您收藏本站,我们将为您提供最新的redis list操作,闲扯Redis四 : List数据类型底层编码转换资源

<h2>前言</h2>

     Redis提供了5种数据类型:String(字符串)、Hash(哈希)、List(列表)、Set(集合)、Zset(有序集合),理解每种数据类型的特点对于redis的开发和运维非常重要。

Redis中的list是我们经常使用到的一种数据类型,根据使用方式的不同,可以应用到很多场景中。

<h2><span style="font-weight:bold;"><span style="font-weight:bold;">编码转换</span></span></h2>

上节说道,List类型有两种实现方式:

1、使用压缩列表(ziplist)实现的列表对象。

2、使用双端链表( linkedlist )实现的列表对象。 并且,留下了一个疑问? Redis列表什么时候会使用ziplist编码,什么时候又会使用linkedlist编码呢?

参见了《Redis设计与实现》,得出了一个结论:ziplist与linkedlist之间存在着一种编码转换机制

当列表对象可以同时满足下列两个条件时,列表对象采用ziplist编码:

(1)列表对象保存的所有字符串元素的长度都小于64字节;

(2)列表元素保存的元素数量小于512个;

否则采用linkedlist编码

注意:以上两个条件的上限值可以在配置文件中修改 list-max-ziplist-value选项和 list-max-ziplist-entries选项,另外对于使用ziplist编码的列表对象,当以上两个条件中任何一个不能满足时,对象的编码转换操作就会执行,原本保存在压缩列表里面的所有列表元素都会被转移并保存到双端链表里面,对象的编码也从ziplist变为linkedlist

图片来源:《Redis设计与实现》

<h2><span style="font-weight:bold;"><span style="font-weight:bold;">操作验证</span></span></h2>

书中是这样说的,但是还是要自己操作验证一下的,go!

什么鬼,不是说 ziplist 和 linkedlist,还有编码转换吗,咋一个都不是,这个quicklist是什么结构?

看到这大家可能有一点懵逼,细品之后甚至想要动手:七哥,你TM是不是在忽悠我?

嗯,这个不要急,听我继续哔哔(假装冷静)

先来看一下操作的redis的版本:version=5.0.4

再看一下,黄建宏老师《Redis设计与实现》第二版中对应的redis版本:3.0,查阅资料发现redis在 3.2 版本的时候,考虑到redis的空间存储效率和时间效率,引入了quicklist(快速列表)作为list的底层实现,原来是这样啊!

这就能说的通了,哈哈哈,下节咱们就来看看这个 quicklist 究竟是个什么啥,前面针对 3.0 版本的分析,看都看了,还能怎么办呢

<h2><span style="font-weight:bold;"><span style="font-weight:bold;">要点总结</span></span></h2>

1)(Redis 3.2 版本前)列表对象底层实现的方式,压缩列表与双端链表之间存在转换

2)(Redis 3.2 版本前)同时满足两个条件:列表对象保存的所有字符串元素的长度都小于64字节;列表元素保存的元素数量小于512个;列表对象采用 ziplist 编码,否则采用 linkedlist 编码

3)(Redis 3.2 版本)考虑到 Redis 的空间存储效率和时间效率,引入了 quicklist(快速列表)作为 list 的底层实现

-END-

到此这篇关于“redis list操作_闲扯Redis四 : List数据类型底层编码转换”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
redis list操作_闲扯Redis四 : List数据类型底层编码转换
PHP操作Redis数据库常用方法(总结)
PHP操作Redis数据库常用方法
PHP Redis相关操作大全
REDIS基础, GO语言
php-redis中文文档之五
超全的!Redis的安装和基础操作
redis基础问答
PHP-redis中文帮助文档
Redis缓存之Set使用及redis遇到的一些问题

[关闭]
~ ~