《闲扯Redis三》Redis五种数据类型之List型

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

Redis五种数据类型

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

二、操作命令

List数据类型在 Redis 中的相关命令:

命令 描述 用法
LPUSH   1.将一个或多个值value插入到列表key的表头
2.如果有多个value值,那么各个value值按从左到右的顺序依次插入表头
3.key不存在,一个空列表会被创建并执行LPUSH操作
4.key存在但不是列表类型,返回错误
  LPUSH key value [value ...]  
LPUSHX   1.将值value插入到列表key的表头,当且仅当key存在且为一个列表
2.key不存在时,LPUSHX命令什么都不做
  LPUSHX key value  
LPOP   1.移除并返回列表key的头元素   LPOP key  
LRANGE   1.返回列表key中指定区间内的元素,区间以偏移量start和stop指定
2.start和stop都以0位底
3.可使用负数下标,-1表示列表最后一个元素,-2表示列表倒数第二个元素,以此类推
4.start大于列表最大下标,返回空列表
5.stop大于列表最大下标,stop=列表最大下标
  LRANGE key start stop  
LREM   1.根据count的值,移除列表中与value相等的元素
2.count>0表示从头到尾搜索,移除与value相等的元素,数量为count
3.count<0表示从从尾到头搜索,移除与value相等的元素,数量为count
4.count=0表示移除表中所有与value相等的元素
  LREM key count value  
LSET   1.将列表key下标为index的元素值设为value
2.index参数超出范围,或对一个空列表进行LSET时,返回错误
  LSET key index value  
LINDEX   1.返回列表key中,下标为index的元素   LINDEX key index  
LINSERT   1.将值value插入列表key中,位于pivot前面或者后面
2.pivot不存在于列表key时,不执行任何操作
3.key不存在,不执行任何操作
  LINSERT key BEFORE  
LLEN   1.返回列表key的长度
2.key不存在,返回0
  LLEN key  
LTRIM   1.对一个列表进行修剪,让列表只返回指定区间内的元素,不存在指定区间内的都将被移除   LTRIM key start stop  
RPOP   1.移除并返回列表key的尾元素   RPOP key  
RPOPLPUSH   在一个原子时间内,执行两个动作:
1.将列表source中最后一个元素弹出并返回给客户端
2.将source弹出的元素插入到列表desination,作为destination列表的头元素
  RPOPLPUSH source destination  
RPUSH   1.将一个或多个值value插入到列表key的表尾   RPUSH key value [value ...]  
RPUSHX   1.将value插入到列表key的表尾,当且仅当key存在并且是一个列表
2.key不存在,RPUSHX什么都不做
  RPUSHX key value  

实践:别偷懒,动手一下,try it out

Redis五种数据类型

三、应用场景

1、lpush+lpop=Stack(栈)
2、lpush+rpop=Queue(队列)
3、lpush+ltrim=Capped Collection(有限集合)
4、lpush+brpop=Message Queue(消息队列)
5、排行榜,数据最新列表等等

Redis五种数据类型

四、底层解析

结构图上显示,List类型有两种实现方式:
举例说明,创建列表对象 numbers

Redis五种数据类型

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

结构如下

Redis五种数据类型

2、使用双端链表(linkedlist)实现的列表对象

结构如下

Redis五种数据类型

五、疑问思考

压缩列表与双端链表是什么样的结构?

1、压缩列表(ziplist)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgjxfj.html