redis 列表对象list命令详细讲解
时间:2018-11-16
本文章向大家介绍redis中list类型详解及常用命令,需要的朋友可以参考一下
一. 列表对象概述
在第9篇中讲到了列表对象的编码可以是ziplist或者linkedlist。ziplist编码的列表对象使用压缩列表作为底层实现,每个压缩列表节点(entry)保存了一个列表元素。例如使用rpush命令将创建一个列表对象作为numbers键的值。
127.0.0.1:6379> rpush numbers 1 "three" 5 (integer) 3 127.0.0.1:6379> object encoding numbers "quicklist"
通过上面查看底层数据结构并不是ziplist,而是quicklist结构。 该结构是在redis 3.2版本中新加的数据结构,用在列表的底层实现,由ziplist组成的双向链表。链表中的每一个节点都以压缩列表ziplist的结构保存着数据,而ziplist有多个entry节点,保存着数据。相当与一个quicklist节点保存的是一片数据,而不再是一个数据。
例如:一个quicklist结构有4个quicklistNode节点,每个节点都保存着1个ziplist结构,每个ziplist的大小不超过8kb,ziplist的entry节点中的value成员保存着数据。以后在深入了解quicklist数据结构。
二. 列表对象命令
-- rpush 命令可向list的右边(尾部)添加一个新元素,读出来就是(A,B,first)。 127.0.0.1:6379> rpush mylist A (integer) 1 127.0.0.1:6379> rpush mylist B (integer) 2 127.0.0.1:6379> rpush mylist first (integer) 3 -- lrange 命令获取列表指定范围内的元素,带有两个索引,一定范围的第一个和最后一个元素。-1表示最后一个元素,-2表示list中的倒数第二个元素,以此类推。下面是读出列表mylist。 127.0.0.1:6379> lrange mylist 0 -1 1) "A" 2) "B" 3) "first" -- lpush命令可向list的左边(头部)添加一个新元素,读出来就是(first,B,A)。 127.0.0.1:6379> lpush mylist A (integer) 1 127.0.0.1:6379> lpush mylist B (integer) 2 127.0.0.1:6379> lpush mylist first (integer) 3 127.0.0.1:6379> lrange mylist 0 -1 1) "first" 2) "B" 3) "A" -- Blpop 命令移出第一个元素并返回列表的第一个元素. 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。下面是移除了每一个first元素。 127.0.0.1:6379> blpop mylist 5 1) "mylist" 2) "first" 127.0.0.1:6379> lrange mylist 0 -1 1) "B" 2) "A" -- Brpop 命令移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。下面二个元素,移除了最后一个。 127.0.0.1:6379> lrange mylist 0 -1 1) "B" 2) "A" 127.0.0.1:6379> brpop mylist 5 1) "mylist" 2) "A" 127.0.0.1:6379> lrange mylist 0 -1 1) "B" -- Brpoplpush 命令从列表中弹出一个值,将弹出的元素插入到另外一个列表中并返回它; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 -- 下面mylist2列表获取了mylist列表的一个元素 127.0.0.1:6379> brpoplpush mylist mylist2 5000 "B" --弹出一个值, 移到了mylist2中,设置超时时间 127.0.0.1:6379> lrange mylist 0 -1 (empty list or set) -- 空列表 127.0.0.1:6379> lrange mylist2 0 -1 1) "B" 2) "C" -- Lindex 命令用于通过索引获取列表中的元素。你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。下面获取mylist2的第一个元素。 127.0.0.1:6379> lrange mylist2 0 -1 1) "B" 2) "C" 127.0.0.1:6379> lindex mylist2 0 "B" -- Linsert 命令用于在列表的元素前或者后插入元素。格式: LINSERT key BEFORE|AFTER pivot value, 下面将A插入到已有C元素的前面。 127.0.0.1:6379> linsert mylist2 before "C" "A" (integer) 3 127.0.0.1:6379> lrange mylist2 0 -1 1) "B" 2) "A" 3) "C"
--Llen 命令用于返回列表的长度。 127.0.0.1:6379> llen mylist2 (integer) 3 --Lpop 命令用于移除并返回列表的第一个元素 127.0.0.1:6379> lpop mylist2 "B" 127.0.0.1:6379> lrange mylist2 0 -1 1) "A" 2) "C" --Lpush 命令将一个或多个值插入到列表头部, 上面有单个元素添加,还可以是多个元素添加,这里不在演示。 --Lpushx 将一个或多个值插入到已存在的列表头部。key的列表中必须要元素。 127.0.0.1:6379> lpushx mylist "A" (integer) 0 --添加失败,因为mylist是空列表 127.0.0.1:6379> lrange mylist 0 -1 (empty list or set) 127.0.0.1:6379> lpush mylist A B (integer) 2 127.0.0.1:6379> lpushx mylist C (integer) 3 -- 添加成功。 127.0.0.1:6379> lrange mylist 0 -1 1) "C" 2) "B" 3) "A" -- Lrem 根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素。 意思是列表中元素与value相等的,移除count个。 127.0.0.1:6379> lpush my "one" "two" "three" "one" (integer) 4 127.0.0.1:6379> lrange my 0 -1 1) "one" 2) "three" 3) "two" 4) "one" 127.0.0.1:6379> lrem my 1 "one" --移除1个one元素 (integer) 1 127.0.0.1:6379> lrange my 0 -1 1) "three" 2) "two" 3) "one" -- Lset 通过索引来设置元素的值。 127.0.0.1:6379> lrange my 0 -1 1) "three" 2) "two" 3) "one" 127.0.0.1:6379> lset my 2 "four" OK -- 第三个元素的值从onw 改为了four 127.0.0.1:6379> lrange my 0 -1 1) "three" 2) "two" 3) "four" --Ltrim 对一个列表只保留指定区间内的元素。不在指定区间之内的元素都将被删除。下标 0 表示列表的第一个元素,以 1 表示列表的第二个元素。 格式 LTRIM KEY_NAME START STOP 127.0.0.1:6379> lrange my 0 -1 1) "three" 2) "two" 3) "four" 127.0.0.1:6379> ltrim my 1 -1 OK -- 第一个元素将被删除 127.0.0.1:6379> lrange my 0 -1 1) "two" 2) "four" -- Rpop 命令用于移除最后一个元素,并返回该元素. 127.0.0.1:6379> lrange my 0 -1 1) "two" 2) "four" 127.0.0.1:6379> rpop my "four" -- 移除最后一个元素 127.0.0.1:6379> lrange my 0 -1 1) "two" 其它: --Rpoplpush 命令用于移除列表的最后一个元素,并将该元素添加到另一个列表并返回。 --Rpush 命令用于将一个或多个值插入到列表的尾部(最右边)。上面有单个元素添加,还可以是多个元素添加,这里不在演示。 --Rpushx 命令用于将一个或多个值插入到已存在的列表尾部(最右边)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- JSP分页显示(前端处理)
- 拓扑排序-HDU2647 Reward
- hadoop2.7.3源码解析之HA架构分析
- hadoop源码解析之hdfs内部结构分析
- 浙大版《C语言程序设计(第3版)》题目集 习题10-5 递归计算Ackermenn函数
- 浙大版《C语言程序设计(第3版)》题目集 习题10-6 递归求Fabonacci数列
- hadoop2.7.3源码解析之hdfs删除文件全流程分析h
- 二维树状数组-POJ 2155 Matrix
- 浙大版《C语言程序设计(第3版)》题目集 习题10-7 十进制转换二进制
- flink开发过程中遇到的问题集锦
- FLINK实战-使用CEP进行网站监控报警和报警恢复
- 浙大版《C语言程序设计(第3版)》题目集 习题10-8 递归实现顺序输出整数
- 浅谈DAO设计模式(示例)
- 浙大版《C语言程序设计(第3版)》题目集 习题11-1 输出月份英文名
- flink教程-flink 1.11 使用sql将流式数据写入hive