列表(list) 类型是用来存储多个有序的字符串
列表中的每个字符串称为元素(element) , 一个列表最多可以存储232-1个元素。
列表是一种比较灵活的数据结构, 它可以充当栈和队列的角色, 在实际开发上有很多应用场景
列表类型有两个特点:
第一、 列表中的元素是有序的,这就意味着可以通过索引下标获取某个元素或者某个范围内的元素列表。
第二、 列表中的元素可以是重复的。
命令
添加 从由插入 rpush key value [value ...] 从左插入 lpush key value [value ...] 向某个元素前或后插入 linsert key before|after pivot value 查找 获取指定范围内的元素列表 lrange key start end lrange操作会获取列表指定索引范围所有的元素。 索引下标有两个特点: 第一, 索引下标从左到右分别是0到N-1, 但是从右到左分别是-1到-N。 第二, lrange中的end选项包含了自身 获取列表指定索引下标的元素 lindex key index 获取列表长度 llen key 删除 从列表左侧弹出元素 lpop key 从列表右侧弹出 rpop key 删除指定元素 lrem key count value lrem命令会从列表中找到等于value的元素进行删除, 根据count的不同 分为三种情况: ·count>0, 从左到右, 删除最多count个元素。 ·count<0, 从右到左, 删除最多count绝对值个元素。 ·count=0, 删除所有。 按照索引范围修剪列表(只保留指定范围内从列表数据) ltrim key start end 修改 修改指定索引下标的元素 lset key index newValue 阻塞操作 阻塞式弹出 blpop key [key ...] timeout brpop key [key ...] timeout blpop和brpop是lpop和rpop的阻塞版本, 它们除了弹出方向不同, 使用方法基本相同, 所以下面以brpop命令进行说明, brpop命令包含两个参数: ·key [key...]: 多个列表的键。 ·timeout: 阻塞时间(单位: 秒)。 注: 列表为空: 如果timeout=3, 那么客户端要等到3秒后返回, 如果timeout=0, 那么客户端一直阻塞等下去(如果此时向列表中插入数据,列表就有数据了,就会立刻返回) 列表不为空: 如果timeout=0,客户端会立即返回
列表相关命令时间复杂度
内部编码
列表类型的内部编码有两种。
·ziplist(压缩列表) : 当列表的元素个数小于list-max-ziplist-entries配置(默认512个) , 同时列表中每个元素的值都小于list-max-ziplist-value配置时(默认64字节) , Redis会选用ziplist来作为列表的内部实现来减少内存的使用。
·linkedlist(链表) : 当列表类型无法满足ziplist的条件时, Redis会使用linkedlist作为列表的内部实现。
注:Redis3.2版本提供了quicklist内部编码, 简单地说它是以一个ziplist为节点的linkedlist, 它结合了ziplist和linkedlist两者的优势, 为列表类型提供了一种更为优秀的内部编码实现
使用场景
消息队列
文章列表
实际上列表的使用场景很多, 在选择时可以参考以下口诀:
·lpush+lpop=Stack( 栈) ·lpush+rpop=Queue( 队列) ·lpsh+ltrim=Capped Collection( 有限集合) ·lpush+brpop=Message Queue( 消息队列)
关注我的公众号,不定期推送资讯
本文来自博客园,作者:链条君,转载请注明原文链接:https://www.cnblogs.com/MacoLee/p/13960053.html