List(列表)
list使用场景:可以把它用作成栈(lpush rpop左边进去 右边出来),队列,阻塞队列 ,消息排队,消息队列(lpush rpop)
所以的list命令都是以"l(L)"开头的
1 lpush lpush (list) (v1)(v2)(v3) 从左边一次性或者多次插入.也就是头部
127.0.0.1:6379[2]> lpush list 1 2 3 #创建一个新的list的list一次性添加三个值 (integer) 3 #返回当前这个list里面有几个元素 127.0.0.1:6379[2]> lrange list 0 -1 #查看这个list名为list里面的全部元素(0,-1查看全部) 1) "3" 2) "2" 3) "1" 127.0.0.1:6379[2]> lrange list 0 1 #查看最后两个元素(0,1) 1) "3" 2) "2" 127.0.0.1:6379[2]> lrange list 0 2 #查看最后三个个元素(0,1,2) 1) "3" 2) "2" 3) "1" 127.0.0.1:6379[2]> lrange list 0 0 #查看最后一个元素 1) "3"
2 lrange Lrange key (index)(index) 获取指定区间的值,去如果是0,-1的话就是查看全部的 想要得到第一个元素使用0 0
127.0.0.1:6379[2]> lrange list 0 -1 #查看这个list名为list里面的全部元素(0,-1查看全部) 1) "3" 2) "2" 3) "1" 127.0.0.1:6379[2]> lrange list 0 1 #查看最后两个元素(0,1) 1) "3" 2) "2" 127.0.0.1:6379[2]> lrange copylist 0 0 #查看第一个元素 1) "wyh4"
3 rpush r(right)push (list)(v1)(v2)(v3)从右边一次性或者多次插入.也就是尾部
127.0.0.1:6379[2]> rpush list four #给list从右边添加"four"这个元素 (integer) 4 127.0.0.1:6379[2]> rpush list five #给list从右边添加"five"这个元素 (integer) 5 127.0.0.1:6379[2]> lrange list 0 -1 #查看全部的list 1) "3" 2) "2" 3) "1" 4) "four" 5) "five"
4 lpop lpop(list)从左边删除一个值
127.0.0.1:6379[2]> lpush list 1 2 3 #创建一个多元素的list (integer) 3 127.0.0.1:6379[2]> lrange list 0 -1 #查看全部的值 1) "3" 2) "2" 3) "1" 127.0.0.1:6379[2]> lpop list # 从左边删除一个值 "3" 127.0.0.1:6379[2]> rpop list #从右边删除一个值 "1" 127.0.0.1:6379[2]> lrange list 0 -1 #查看全部的值 1) "2"
5 rpop rpop(list)从右边删除一个值
127.0.0.1:6379[2]> lpush list 1 2 3 #创建一个多元素的list (integer) 3 127.0.0.1:6379[2]> lrange list 0 -1 #查看全部的值 1) "3" 2) "2" 3) "1" 127.0.0.1:6379[2]> lpop list # 从左边删除一个值 "3" 127.0.0.1:6379[2]> rpop list #从右边删除一个值 "1" 127.0.0.1:6379[2]> lrange list 0 -1 #查看全部的值 1) "2"
6 lindex index(list)(index) 通过下标获取值,注意,下标也是从0开始的
127.0.0.1:6379[2]> lrange list 0 -1 #查看全部的值 1) "3" 2) "2" 3) "1" 4) "2" 127.0.0.1:6379[2]> lindex list 0 #查看左边第一个值 "3" 127.0.0.1:6379[2]> lindex list 1 #查看左边第二个值 "2"
7 llen llen(list) 查看元素的长度
127.0.0.1:6379[2]> lrange list 0 -1 #查看全部的元素 1) "3" 2) "2" 3) "1" 4) "2" 127.0.0.1:6379[2]> llen list #查看元素的长度 (integer) 4
8 lrem
lrem(list)(count)(value)移除几个什么样的元素(精确匹配)
127.0.0.1:6379[2]> lrange list 0 -1 #查看全部的元素 1) "3" 2) "2" 3) "1" 4) "2" 127.0.0.1:6379[2]> lrem list 1 1 #移除1个值为1的元素 (integer) 1 127.0.0.1:6379[2]> lrem list 2 2 #移除2个值为2的元素 (integer) 2 127.0.0.1:6379[2]> lrange list 0 -1 #查看全部的元素 1) "3"
9 ltrim ltrim(list)(index)(index)在java中是修剪,在redis是截取的意思,通过下标截取某一段key的元素,但是会改变这个list,只剩下我们要截取的元素
127.0.0.1:6379[2]> lpush list 1 2 3 4 5 #创建元素 (integer) 5 127.0.0.1:6379[2]> lrange list 0 -1 #查看元素 1) "5" 2) "4" 3) "3" 4) "2" 5) "1" 127.0.0.1:6379[2]> ltrim list 0 1 #截取key为list的元素,从第一位截取到第二位 OK 127.0.0.1:6379[2]> lrange list 0 -1 #查看元素 1) "5" 2) "4"
10 rpoplpush rpoplpush(list1)(list2) 移出列表的最后一个元素,将它移动到新的列表
127.0.0.1:6379[2]> rpush list wyh1 wyh2 wyh3 #创建一个listy一次性添加多个值 (integer) 3 127.0.0.1:6379[2]> rpoplpush list copylist #复制一个list命名为copylist "wyh3" 127.0.0.1:6379[2]> lrange copylist 0 -1 #查看copylist的元素 1) "wyh3" 127.0.0.1:6379[2]> lrange list 0 -1 #查看list的元素 1) "wyh1" 2) "wyh2"
11 exists exists(list) 判断list是否存在 存在返回1 不存在返回0
127.0.0.1:6379[2]> exists list #判断list这个列表是否存在 (integer) 1 #存在返回1 不存在返回0 127.0.0.1:6379[2]> exists list1 #判断list1这个列表是否存在 (integer) 0 #存在返回1 不存在返回0
12 lset lset(list)(index)(value) 相当于修改替换replace 将列表中指定下标的值替换成另外一个值,如果不存在会报错,存在会替换当前值
127.0.0.1:6379[2]> lset list 0 item #把list这个列表第0个下表的值替换成item (error) ERR no such key #因为list这个列表不存在或者list这个列表没有值 127.0.0.1:6379[2]> lpush list value1 #给list这个列表进行赋值 (integer) 1 127.0.0.1:6379[2]> lrange list 0 0 #查看list这个列表全部的值 1) "value1" 127.0.0.1:6379[2]> lset list 0 item #将list这个列表中的下标为0的值替换成item OK 127.0.0.1:6379[2]> lrange list 0 0 #查看list这个列表全部的值 1) "item" 127.0.0.1:6379[2]> lrange list 1 value2 #将list这个列表中的下标为1的值替换成value (error) ERR value is not an integer or out of range ##因为llist这个列表没有下标为1的值
13 linsert linsert(key)(before前或者after后)(value)(value) 将某个具体的value插入列表中某个元素的前面或者后面,在list里面之前value位置(之前或者之后)插入另外一个value的元素
127.0.0.1:6379[2]> lpush list 1 2 3 #创建list集合 (integer) 3 127.0.0.1:6379[2]> linsert list before 2 0 #在list里面value为2之前插入一个value为0的元素 (integer) 4 127.0.0.1:6379[2]> lrange list 0 -1 #查看list的全部元素 1) "3" 2) "0" 3) "2" 4) "1" 127.0.0.1:6379[2]> linsert list after 2 0 #在list里面value为2之后插入一个value为0的元素 (integer) 5 127.0.0.1:6379[2]> lrange list 0 -1 #查看list的全部元素 1) "3" 2) "0" 3) "2" 4) "0" 5) "1"
list小结
1 list实际上是一个链表,before node after,left,right都可以插入值
2 如果插入的这个key不存在,需要创建一个新的链表
3 如果key存在,就在它的基础上新增内容
4 如果移出了key,所有的value都消失了,如果移除了所有值,空链表,也代表不存在
5 在两边插入或者改动值,效率最高,如果执行对中间元素的处理,效率会比较低