Redis常用命令-List

Redis是一个开源的速度非常快的非关系数据库,它可以存储键(key)与5种不同类型的值(value)之间的映射(mapping),可以将存储在内存的键值对数据持久化到硬盘,可以使用复制特性来扩展读性能,还可以使用客户端分片来扩展写性能。、
请注意:存储在Redis中的数据并不会由于计算机的关机而从内存中消失,必须手动删除数据才会消失。
Redis的集合和列表都可以存储多个字符串,它们之间的不同在于,列表可以存储多个相同的字符串,而集合则通过使用散列来保证自己存储的每个字符串都是各不相同的(这些散列表只有键,但没有与键相关联的值)。

一、List键值结构(有序可重复)

这里写图片描述
Redis支持list数据结构,底层是一个双向链表,允许重复值存在,按照插入顺序保存。lpush从左边插入,rpush从右边插入。lpop从左边弹出,rpop从右边弹出。
这样能轻易地实现FIFO队列思想:插入和弹出在不同方向操作。
也可以轻易地实现FILO队列思想:插入和弹出在相同方向操作。

二、重要API

参数解释
RpushLpush key-name value[value…]——将一个或多个值推入列表的右端
LpushLpush key-name value[value…]——将一个或多个值推入列表的左端
LinsertLinsert key-name BEFORE|AFTER pivot value——在list指定的值pivot前|后插入value
RpopRpop key-name——移除并返回列表最右端的元素
LpopLpop key-name index newValue——移除并返回列表最左端的元素
LtrimLtrim key-name start end——对列表进行修剪,只保留从start偏移量到end偏移量范围内的元素,包括start和end在内
LremLrem key-name count value——根据count值从列表中删除与value相等的项,(1)count>0,从左到右删除最多count个与value相等的项 (2)count<0,从右到左删除最多count个与value相等的项 (3)count=0,删除所有与value相等的项
LsetLset key-name index newValue——设置列表指定索引的值为newValue
LindexLindex key-name offset——返回列表中偏移量为offset的元素
LrangeLrange key-name start end——返回列表从start偏移量到end偏移量范围内的所有元素,包括start和end在内;end=-1表示取出从start开始到队列结尾的所有元素,包括start在内
LlenLlen key-name——获取列表的长度
BlpopBlpop key-name [key-name…] timeout——从第一个非空列表中弹出位于最左端的元素,或者在timeout秒之内阻塞并等待可弹出的元素出现
BrpopBrpop key-name [key-name…] timeout——从第一个非空列表中弹出位于最右端的元素,或者在timeout秒之内阻塞并等待可弹出的元素出现
RpopLpushRpopLpush source-key dest-key——从source-key列表中弹出位于最右端的元素,然后将这个元素推入dest-key列表的最左端,并向用户返回这个元素
BRpopLpushBRpopLpush source-key dest-key timeout——从source-key列表中弹出位于最右端的元素,然后将这个元素推入dest-key列表的最左端,并向用户返回这个元素;如果source-key为空,那么在timeout秒之内阻塞并等待可弹出元素出现

三、注意事项

1、要小心使用Ltrim命令

实例演示:
1、Lpush和Rpush
Lpush list-key1 val1 val2 //list-key1值为:val2 val1,最左边的元素的索引为0
Lpush list-key1 val3 val4  //list-key1值为:val4 val3 val2 val1
Lpush list-key1 val5     //list-key1值为:val5 val4 val3 val2 val1
Rpush list-key1 val6    //list-key1值为:val5 val4 val3 val2 val1 val6
Rpush list-key1 val7 val8  //list-key1值为:val5 val4 val3 val2 val1 val6 val7 val8

2、Lpop和Rpop
Lpop list-key1 //list-key1值为:val4 val3 val2 val1 val6 val7 val8
Rpop list-key1 //list-key1值为:val4 val3 val2 val1 val6 val7

3、Lrange
Lrange list-key1 0 -1 //结果为:val4 val3 val2 val1 val6 val7
Lrange list-key1 0 5  //结果为:val4 val3 val2 val1 val6 val7
Lrange list-key1 4 5  //结果为:val6 val7

4、Lindex
Lindex list-key1 0 //结果为:val4
Lindex list-key1 3 //结果为:val1

5、Ltrim
Ltrim list-key1 3 5 //list-key1值为:val1 val6 val7

6、Blpop
在测试本命令之前先对需要用到的数据进行初始化。
Rpush list-key1 val5 val2         //list-key1值为:val1 val6 val7 val5 val2
Rpush list-key2 vala valb valc vald vale  //list-key2值为:vala valb valc vald vale
Blpop list-key1 list-key2 100       //list-key1值为:val6 val7 val5 val2
                     //list-key2值为:vala valb valc vald vale

7、Brpop
Brpop list-key2 list-key1 100   //list-key1值为:val6 val7 val5 val2
                //list-key2值为:vala valb valc vald

8、RpopLpush
RpopLpush list-key1 list-key2  //list-key1值为:val6 val7 val5
                //list-key2值为:val2 vala valb valc vald

9、BRpopLpush
BRpopLpush list-key2 list-key1 100  //list-key1值为:vald val6 val7 val5
                   //list-key2值为:val2 vala valb valc

四、任务调度系统简单案例

生产者不断产生任务,放入task-queue中,消费者不断从中取出任务来处理,同时放入temp-queue中进行缓存。如果任务执行成功,则清除temp-queue中暂存的任务,否则将temp-queue中暂存的任务再插回到task-queue中。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值