Redis学习第三天

本文详细介绍了Redis中快速列表quicklist和压缩列表ziplist的设计原理,以及它们如何在内存效率和操作速度之间权衡。讲述了List结构的使用策略,并提及其他数据结构如Hash、Set和SortedSet中ziplist的应用。
摘要由CSDN通过智能技术生成

来辣!!!

 整个列表对应一个key值,可以从头部也可以从尾部添加元素,没有元素时就自动删除。

少量列表项和少量键值对,Redis底层都会使用压缩列表实现。

quicklist和ziplist

quicklistziplist 都是 Redis 中为了提高存储效率和查询速度而设计的数据结构。它们在 Redis 的 List 数据类型中有应用。

ziplist (压缩列表)

  • 是一个特别为内存存储优化的链表。
  • 存储多个条目,每个条目可以是字符串或整数。
  • 用于存储较小的列表,如小字符串和小整数。
  • 通过连续的内存分配,实现了对空间的高效利用,提高读写效率。
  • 但是,它不太适合非常长的列表,因为它的插入和删除操作在较长的列表上可能会变得较慢。

quicklist

  • 是为了克服 ziplist 的局限性而设计的,结合了 ziplist 和双向链表的特点。
  • quicklist 由多个 ziplist 节点组成,这些节点通过双向链表连接。
  • 当列表较小时,只需要一个 ziplist 节点。
  • 当列表增长并超出单个 ziplist 的最大容量时,quicklist 将添加更多的 ziplist 节点。
  • 这种结构允许 Redis 在内存效率和操作速度之间达到一个平衡。

List 结构应用

在 Redis 的早期版本中,List 结构仅使用 ziplist 作为底层实现。但随着 ziplist 在较长的列表上的性能问题变得明显,Redis 开发者引入了 quicklist 作为 List 的默认实现。

在现代的 Redis 版本中,List 结构使用 quicklist 作为默认存储,它会根据配置和数据的大小智能地决定何时将数据存储在单独的 ziplist 节点中。

为了更好地控制性能和存储效率,Redis 允许用户通过配置文件参数(如 list-max-ziplist-sizelist-max-ziplist-entries)来调整 quicklistziplist 的行为。

ziplist扩展

Redis 的 hash 结构在元素数量较少或元素内容较小的情况下会使用 ziplist 作为其底层存储。这是一个优化策略,用于减少内存使用并提高读写效率。

Redis 的多种数据结构都使用了这种优化方法,包括:

  1. Hash:当字段数量较少时使用 ziplist
  2. List:如前所述,当元素数量较少时,会使用 ziplist 存储,但包装在 quicklist 结构中。
  3. Set:当元素数量较少并且元素都是整数时,会使用 intset(整数集合)。否则,它将使用哈希表。
  4. Sorted Set:当元素数量较少且都是整数时,会使用 ziplist 存储。否则,它将使用一个组合结构,包括哈希表和跳表。

为什么要这样做?这种设计策略的原因是:

  • 内存效率:较小的数据结构使用连续的内存分配和紧凑的存储格式,这有助于减少内存碎片和总体内存使用。
  • 操作效率:在小数据集上,紧凑的数据结构通常提供更快的读写速度。

好好好,老师后面讲到了:

lpush代表头部,rpush代表尾部,lindex读取指定索引位置元素的值。

注意是lpush还是rpush,注意最终的index值!0是链表头部!

没有rrange,且必须是左参数>右参数!

小仙女的Redis:0>lrange list1 0 -1
1) "10"
2) "2"
3) "1"

小仙女的Redis:0>linsert list1 before 2 20
"4"
小仙女的Redis:0>lrange list1 0 -1
1) "10"
2) "20"
3) "2"
4) "1"

LTRIM起到截取的作用,和LRANG类似,但LRANG不修改列表,只是展示而已。

好好好,好好好,还差最后一个Set,冲啊!!!

和python一样,Set都是存储各不相同的元素,并且无序。

返回1表示移除成功!

还有随机获取元素SRANDMEMBER set count(从Set中随机抽取重复、不重复的元素,比如可以用于用户抽奖等)、随机移除元素SPOP key count、集合运算SINTER/SUNION/SDIFF set set多个集合求交集并集差集。

分值的定义!

ZREM删除成员,ZSCORE通过成员名称获取分数,ZINCRBY指定成员分值自增自减操作,ZRANK得到成员排名(升序,名次从0开始),ZREVRANK降序排名,ZRANGE给定分值排名范围,ZCOUNT成员数量

数值(表示开,是开区间,不仅仅是左开,可以作为右开使用,括号仍然是左括号

+Inf表示正无穷大,-inf表示负无穷大!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Joy T

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值