redis学习笔记(3)list数据类型

1、概述

单键多值:Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。

 

 2、相关操作

  • lpush key value1 [value2]--------------将一个或多个值插入到列表头部,返回插入数量,从1开始
  • lpushx key value--------------将一个值插入到已存在的列表头部,返回integer,0-插入失败,成功返回当前list数量
  • rpush key value1 [value2]--------------在列表中添加一个或多个值,返回integer,0-插入失败,成功返回当前list数量
  • rpushx key value------------------为已存在的列表添加值,返回integer,0-插入失败,成功返回当前list数量
  • lset key index value--------------通过索引设置列表元素的值
  • linsert key BEFORE|AFTER pivot value----------------在列表的元素(pivot)前或者后插入元素,返回integer,-1-插入失败,成功返回当前list数量
  • brpoplpush source destination timeout---------------从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹
  • lindex key index------------------通过索引获取列表中的元素
  • llen key----------------获取列表长度
  • lrange key start stop-----------------获取列表指定范围内的元素,start、stop超出范围,只返回范围内存在的元素
  • blpop key1 [key2 ] timeout-----------------移出并获取列表的第一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
  • brpop key1 [key2 ] timeout------------------移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
  • rpoplpush source destination--------------移除列表的最后一个元素,并将该元素添加到另一个列表并返回
  • lpop key-------------------移出并获取列表的第一个元素
  • lrem key count value--------------移除列表中count个value元素,返回移除成功的数量
  • rpop key---------------移除并获取列表最后一个元素
  • ltrim key start stop---------------对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。

3、数据结构

  • List 的数据结构为快速链表 quickList。
  • 首先在列表元素较少的情况下会使用一块连续的内存存储,这个结构是 ziplist,也即是压缩列表。它将所有的元素紧挨着一起存储,分配的是一块连续的内存。
  • 当数据量比较多的时候才会改成 quicklist。因为普通的链表需要的附加指针空间太大,会比较浪费空间。比如这个列表里存的只是 int 类型的数据,结构上还需要两个额外的指针 prev 和 next。

                           

  • Redis 将链表和 ziplist 结合起来组成了 quicklist。也就是将多个 ziplist 使用双向指针串起来使用。这样既满足了快速的插入删除性能,又不会出现太大的空间冗余。

 

posted @ 2022-04-30 15:11  ☞@_@  阅读(36)  评论(0编辑  收藏  举报