概述
redis中的list类型可以存储一个有序的字符串列表。
它是一个双向链表,常用的操作是向列表两端添加元素。
适用场景
链表可以非常快速地获取两端的元素,如获取排行榜数据;网站新鲜事;数据分页设计等。
还能作为消息队列使用,但是不推荐使用,因为当前已经有很成熟的消息队列产品如rocketMq,kafka,activeMq等。redis的list不是专门为消息队列设置的,其中有很多限制。
命令
1.向队列两端添加元素
lpush key value[value …]:向队列左边添加元素,返回值表示添加元素后的列表长度。
rpush key value[value …]:向队列右边添加元素,返回值表示添加元素后的列表长度。
lrange key start stop :获取列表片段
lrange key 0 -1:获取整个列表
从返回值中可以看出lpush和rpush的区别:头插和尾插
2.删除列表中指定的值
lrem key count value
删除列表中前count个值为value的元素,返回值是实际删除的元素个数。
根据count的值不同lrem有不同的操作
- count>0 :从列表左边开始删除前count个值为value的元素
- count<0 :从列表右边开始删除前count个值为value的元素
- count=0 :删除所有值为value的元素
从右边删除第一个值为2的元素
3.获取指定索引位置的元素值
lindex key index - index>=0 :从左边开始计算索引(第一个索引值是0)
- index<0 :从右边开始计算索引 (最右边的索引值是-1)
4.为指定位置的元素赋值
lset key index value
5.保留列表指定位置的值
ltrim key start end
ltrim 常和lpush命令一起使用来限制列表中的元素,比如我们希望列表中只保留最新的100条日志。
6.在列表中插入元素
linsert key before|after pivot value
该命令会先从列表左边开始遍历查找值为pivot的元素,然后根据参数before或after来决定value插入该元素之前还是之后
7.将元素从一个列表转到另一个列表
rpoplpush source destination
该命令会先从source列表中取出最右边的一个元素,然后加入到destination列表的左边,并返回这个元素的值,整个过程是原子的。
当source和destination是同一个元素时,该命令会不断地将队尾的元素转移到队首。