Redis实用指令(三)——List
来源:互联网 发布:大数据时代 txt 久久 编辑:程序博客网 时间:2024/06/06 12:40
Lpush:命令将一个或多个值插入到列表头部。 如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。 当 key 存在但不是列表类型时,返回一个错误。
Lpushx:将一个或多个值插入到已存在的列表头部,列表不存在时操作无效。
注意比较这两个在指令的异同:
相同点:1、都是把值放入列表的头部(索引是0);2、都可以同时插入多个值;3、当key的类型不匹配时都会返回错误;4、返回结果都是操作后列表的长度。
不同点:当操作的key不存在时,lpush会创建一个,lpushx返回0,不会创建列表。
redis 127.0.0.1:6379> LPUSH list1 "foo"(integer) 1redis 127.0.0.1:6379> LPUSHX list1 "bar"(integer) 2redis 127.0.0.1:6379> LPUSHX list2 "bar"(integer) 0redis 127.0.0.1:6379> LRANGE list1 0 -11) "foo"2) "bar"
Lset :通过索引来设置元素的值。当索引参数超出范围,或对一个空列表进行 LSET 时,返回一个错误。
这里说的是通过索引来设置元素的值,我觉得用修改来说更贴切些,因为这里的lset不会创建,只是用来对现有的值进行修改。
127.0.0.1:6379> lrange mylist 0 -11) "kun"2) "pang"127.0.0.1:6379> lset mylist 2 aa(error) ERR index out of range127.0.0.1:6379> lset mylist 1 aaOK127.0.0.1:6379> lrange mylist 0 -11) "kun"2) "aa"127.0.0.1:6379>
Lindex :用于通过索引获取列表中的元素。你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
127.0.0.1:6379> lindex mylist 2(nil)127.0.0.1:6379> lindex mylist 1"aa"127.0.0.1:6379>
Linsert :命令用于在列表的元素前或者后插入元素。 当指定元素不存在于列表中时,不执行任何操作。 当列表不存在时,被视为空列表,不执行任何操作。 如果 key 不是列表类型,返回一个错误。
127.0.0.1:6379> linsert mylist before kun pang(integer) 3127.0.0.1:6379> linsert mylist after kun k2(integer) 4127.0.0.1:6379> linsert mylist after kun1 k2(integer) -1127.0.0.1:6379> lrange mylist 0 -11) "pang"2) "kun"3) "k2"4) "aa"127.0.0.1:6379>
在指令中用before就是在指定元素之前插入,如果用after就是在之后插入。
有一点这里没有说明,如果一个列表中存在两个一样的值,插入的时候以哪个值为标准,这里我测试了下:
127.0.0.1:6379> lpush mylist k2(integer) 5127.0.0.1:6379> lrange mylist 0 -11) "k2"2) "pang"3) "kun"4) "k2"5) "aa"127.0.0.1:6379> linsert mylist after k2 af(integer) 6127.0.0.1:6379> lrange mylist 0 -11) "k2"2) "af"3) "pang"4) "kun"5) "k2"6) "aa"127.0.0.1:6379> linsert mylist after k2 af(integer) 7127.0.0.1:6379> lrange mylist 0 -11) "k2"2) "af"3) "af"4) "pang"5) "kun"6) "k2"7) "aa"127.0.0.1:6379> linsert mylist before k2 af(integer) 8127.0.0.1:6379> lrange mylist 0 -11) "af"2) "k2"3) "af"4) "af"5) "pang"6) "kun"7) "k2"8) "aa"127.0.0.1:6379>
这里的结果显示,如果有两个一样的值,会以第一个值为标准来执行,多个的时候也一样,大家可以试下。
Llen :返回列表的长度。 如果列表 key 不存在,则 key 被解释为一个空列表,返回 0 。 如果 key 不是列表类型,返回一个错误。
Lpop :移除并返回列表的第一个元素。
Lrange :返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定。 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。(这个指令上边一直在用)
Lrem :根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素。
COUNT 的值可以是以下几种:
- count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。
- count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。
- count = 0 : 移除表中所有与 VALUE 相等的值。
这里比较麻烦些,具体的还是通过实际操作来理解比较好。
127.0.0.1:6379> lrange mylist 0 -11) "b"2) "k2"3) "pang"4) "k2"5) "k2"6) "kun"7) "k2"8) "aa"127.0.0.1:6379> lrem mylist 1 af(integer) 0127.0.0.1:6379> lrem mylist 1 k2(integer) 1127.0.0.1:6379> lrange mylist 0 -11) "b"2) "pang"3) "k2"4) "k2"5) "kun"6) "k2"7) "aa"127.0.0.1:6379> lpush mylist k2 k2 k2 k2(integer) 11127.0.0.1:6379> lrange mylist 0 -1 1) "k2" 2) "k2" 3) "k2" 4) "k2" 5) "b" 6) "pang" 7) "k2" 8) "k2" 9) "kun"10) "k2"11) "aa"127.0.0.1:6379> lrem mylist 3 k2(integer) 3127.0.0.1:6379> lrange mylist 0 -11) "k2"2) "b"3) "pang"4) "k2"5) "k2"6) "kun"7) "k2"8) "aa"127.0.0.1:6379>
Ltrim : 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
下标 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。
127.0.0.1:6379> lrange mylist 0 -11) "k2"2) "b"3) "pang"4) "k2"5) "k2"6) "kun"7) "k2"8) "aa"127.0.0.1:6379> ltrim mylist 2 -1OK127.0.0.1:6379> lrange mylist 0 -11) "pang"2) "k2"3) "k2"4) "kun"5) "k2"6) "aa"127.0.0.1:6379>
Blpop :移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
如果列表为空,返回一个 nil 。 否则,返回一个含有两个元素的列表,第一个元素是被弹出元素所属的 key ,第二个元素是被弹出元素的值。
127.0.0.1:6379> lrange mylist 0 -11) "pang"2) "k2"3) "k2"4) "kun"5) "k2"6) "aa"127.0.0.1:6379> blpop myl 10(nil)(10.01s)(没有找到要移除的值,实际等待了10.01秒)127.0.0.1:6379> blpop mylist 51) "mylist"(列表名:key)2) "pang"(被移除的value)127.0.0.1:6379> lrange mylist 0 -11) "k2"2) "k2"3) "kun"4) "k2"5) "aa"127.0.0.1:6379>
Brpop:移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
值得注意的是,Blpop 和Brpop都可以同时对多个list进行操作,首先被移除的是第一个列表的值,当第一个列表为空的时候才会对后边列表一次操作。
(本例是blpop )127.0.0.1:6379> lpush list1 value1 valuea valueb(integer) 3127.0.0.1:6379> lpush list2 value2 valuea valueb(integer) 3127.0.0.1:6379> blpop list1 list2 value1 51) "list1"2) "valueb"127.0.0.1:6379> blpop list1 list2 valuea 51) "list1"2) "valuea"127.0.0.1:6379> lrange list2 0 -11) "valueb"2) "valuea"3) "value2"127.0.0.1:6379> blpop list1 list2 value1 51) "list1"2) "value1"127.0.0.1:6379> lrange list1 0 -1(empty list or set)127.0.0.1:6379> lrange list2 0 -11) "valueb"2) "valuea"3) "value2"127.0.0.1:6379> blpop list1 list2 value1 51) "list2"2) "valueb"127.0.0.1:6379>
Brpoplpush :从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
第一个列表中的值会被移除,且操作的是最后一个。
127.0.0.1:6379> lrange list1 0 -11) "valueb"2) "valuea"127.0.0.1:6379> lrange list2 0 -11) "valuea"2) "value2"127.0.0.1:6379> brpoplpush list1 list2 5"valuea"127.0.0.1:6379> lrange list1 0 -11) "valueb"
Rpop :移除并返回列表的最后一个元素。
Rpoplpush :移除列表的最后一个元素,并将该元素添加到另一个列表并返回。
Rpush :将一个或多个值插入到列表的尾部(最右边)。
如果列表不存在,一个空列表会被创建并执行 RPUSH 操作。 当列表存在但不是列表类型时,返回一个错误。
Rpushx:将一个或多个值插入到已存在的列表尾部(最右边)。如果列表不存在,操作无效。
Rpush 、Rpushx、Lpush 和Lpushx这四个指令可以对比着查看理解。
Redis中文网指令:http://www.redis.net.cn/order/3584.html
- Redis实用指令(三)——List
- Redis实用指令(二)——Hash
- Redis实用指令(四)——Set
- Redis实用指令(一)
- redis学习(三)——List数据类型
- 三、Redis基本操作——List
- 三,redis数据类型-List
- AngularJS(三)——指令实战及自定义指令
- Redis命令学习—List(列表)
- ObjectMapper---实用的Object—json工具!结合redis实用
- Redis教程(三):List数据类型
- Redis初探08——Redis的高级实用特性
- JAVAWEB开发之redis学习(三)——list相关的操作命令
- Redis系列(三)—— Redis和消息中间件
- Redis学习笔记——(三)Redis集群安装
- 自定义超实用Redis工具类(满足对象,list,map等类型)
- Redis研究(三)—字符串类型
- MVC实用架构设计(三)——EF
- Java中File 类的使用
- 判断APP是否运行在前台
- MPAndroidChart详解
- SecureCRT中文显示乱码问题解决
- 市医院深入开展出院随访工作案例
- Redis实用指令(三)——List
- Vue初学时一些该注意的细节
- (三)数据链路--图解TCP/IP读书笔记
- git撤销修改过的文件
- MFC无边框对话框的拖动
- Apache虚拟主机配置
- 前端发送get和post请求的三种方式
- c语言数据结构补齐原则
- 话说linux下压缩文件的解压