欢迎来到我的博客园

Redis list类型

Redis list类型

Redis中list类型是string类型的有序列表。Redis的list经常用于:

实现堆和栈。

创建后台系统的队列管理。

 

Redis常用命令

lpush命令

lpush会在list头部位置插入元素, list不存在则创建list,存在则在list最前面插入值。最后插入的在list的最前位置。lpush可以一次性插入多个value到key对应的list中。当多个value同时插入到list中时,最前方的value最先插入,然后依次执行。

127.0.0.1:6379> help lpush

  LPUSH key element [element ...]
  summary: Prepend one or multiple elements to a list
  since: 1.0.0
  group: list
127.0.0.1:6379> lpush list1 l3 l2 l1
(integer) 3
127.0.0.1:6379> lrange list1 0 -1
1) "l1"
2) "l2"
3) "l3"

 lpushx命令

lpushx命令只有当key对应的list存在的时候,才会插入该元素,当该key不存在时,lpushx不会创建key对应的列表。

127.0.0.1:6379> help lpushx

  LPUSHX key element [element ...]
  summary: Prepend an element to a list, only if the list exists
  since: 2.2.0
  group: list

127.0.0.1:6379> lpushx test test0
(integer) 0
127.0.0.1:6379> lrange test 0 -1
(empty array)
127.0.0.1:6379> lpush test test0
(integer) 1
127.0.0.1:6379> lrange test 0 -1
1) "test0"
127.0.0.1:6379> lpushx test test1
(integer) 2
127.0.0.1:6379> lrange test 0 -1
1) "test1"
2) "test0"

lrange命令

返回指定范围内list的元素,范围由start和end两个参数控制,起始为0,也可以为负数。从左向右为0,1...end,从右向左为-1,-2....start.如果想看所有的value可以使用0 -1这样可以看到所有的值

127.0.0.1:6379> help lrange

  LRANGE key start stop
  summary: Get a range of elements from a list
  since: 1.0.0
  group: list

127.0.0.1:6379> lrange list1 0 -1
1) "l1"
2) "l2"
3) "l3"
127.0.0.1:6379> lrange list1 0 1
1) "l1"
2) "l2"
127.0.0.1:6379> lrange list1 -2 -1
1) "l2"
2) "l3"
127.0.0.1:6379> lrange list1 -3 -1
1) "l1"
2) "l2"
3) "l3"

 rpush命令

rpush命令会在list尾部位置插入元素,如果list不存在则创建key对应的list,并插入元素。

127.0.0.1:6379> help push

  LPUSH key element [element ...]
  summary: Apend one or multiple elements to a list
  since: 1.0.0
  group: list

127.0.0.1:6379> rpush rkey test0
(integer) 1
127.0.0.1:6379> rpush rkey test1
(integer) 2
127.0.0.1:6379> rpush rkey test2
(integer) 3
127.0.0.1:6379> lrange rkey 0 -1
1) "test0"
2) "test1"
3) "test2"

  

rpushx命令,会在list尾部位置插入元素,如果list不存在则失败什么都不做。

127.0.0.1:6379> help rpushx

  RPUSHX key element [element ...]
  summary: Append an element to a list, only if the list exists
  since: 2.2.0
  group: list
127.0.0.1:6379> rpushx rlist test1
(integer) 0
127.0.0.1:6379> lrange rpushx 0 -1
(empty array)
127.0.0.1:6379> rpush rlist test1
(integer) 1
127.0.0.1:6379> lrange rlist 0 -1
1) "test1"
127.0.0.1:6379> rpushx rlist test2
(integer) 2
127.0.0.1:6379> lrange rlist 0 -1
1) "test1"
2) "test2"

 

lpop命令

lpop命令从删除列表中头部的元素,lpop命令不需要加参数,也可以指定count为pop出来的数量。

127.0.0.1:6379> help lpop

  LPOP key [count]
  summary: Remove and get the first elements in a list
  since: 1.0.0
  group: list

127.0.0.1:6379> lpush numlist five four three two one
(integer) 5
127.0.0.1:6379> lrange numlist 0 -1
1) "one"
2) "two"
3) "three"
4) "four"
5) "five"
127.0.0.1:6379> lpop numlist
"one"
127.0.0.1:6379> lpop numlist 2
1) "two"
2) "three"

 

rpop命令

rpop命令从list中删除尾部的元素。rpop命令不需要加参数,也可以指定count为pop出来的数量。

127.0.0.1:6379> lrange rlist 0 -1
1) "test1"
2) "test2"
3) "test3"
4) "test4"
127.0.0.1:6379> lpop rlist
"test1"
127.0.0.1:6379> lpop rlist 2
1) "test2"
2) "test3"

 

llen命令

llen命令获取一个列表的长度。

127.0.0.1:6379> help llen

  LLEN key
  summary: Get the length of a list
  since: 1.0.0
  group: list
127.0.0.1:6379> lrange numlist 0 -1
1) "four"
2) "five"
127.0.0.1:6379> llen numlist
(integer) 2

 

lrem命令

LREM key count element

lrem命令会删除list中的元素,当元素与给定值相同是会被删除掉。其中需要指定count值,当count>0时,从列表头到尾删除与指定元素相同的count个元素。count<0时,从尾部向头部删除与指定元素相同的count数量的元素。当count=0时,删除列表中所有与指定元素相同的元素,lrem返回值为删掉的元素个数。

127.0.0.1:6379> lpush strlist hello seven hello six hello five hello four hello three hello two hello one
(integer) 14
127.0.0.1:6379> lrange strlist 0 -1
 1) "one"
 2) "hello"
 3) "two"
 4) "hello"
 5) "three"
 6) "hello"
 7) "four"
 8) "hello"
 9) "five"
10) "hello"
11) "six"
12) "hello"
13) "seven"
14) "hello"
127.0.0.1:6379> lrem strlist 1 hello
(integer) 1
127.0.0.1:6379> lrange strlist 0 -1
 1) "one"
 2) "two"
 3) "hello"
 4) "three"
 5) "hello"
 6) "four"
 7) "hello"
 8) "five"
 9) "hello"
10) "six"
11) "hello"
12) "seven"
13) "hello"
127.0.0.1:6379> lrem strlist -1 hello
(integer) 1
127.0.0.1:6379> lrange strlist 0 -1
 1) "one"
 2) "two"
 3) "hello"
 4) "three"
 5) "hello"
 6) "four"
 7) "hello"
 8) "five"
 9) "hello"
10) "six"
11) "hello"
12) "seven"
127.0.0.1:6379> lrem strlist 2 hello
(integer) 2
127.0.0.1:6379> lrange strlist 0 -1
 1) "one"
 2) "two"
 3) "three"
 4) "four"
 5) "hello"
 6) "five"
 7) "hello"
 8) "six"
 9) "hello"
10) "seven"
127.0.0.1:6379> lrem strlist -2 hello
(integer) 2
127.0.0.1:6379> lrange strlist 0 -1
1) "one"
2) "two"
3) "three"
4) "four"
5) "hello"
6) "five"
7) "six"
8) "seven"
127.0.0.1:6379> lrem strlist 0 hello
(integer) 1
127.0.0.1:6379> lrange strlist 0 -1
1) "one"
2) "two"
3) "three"
4) "four"
5) "five"
6) "six"
7) "seven"

 

lindex命令

lindex命令通过给定的index,返回该位置的值。

127.0.0.1:6379> help lindex

  LINDEX key index
  summary: Get an element from a list by its index
  since: 1.0.0
  group: list

127.0.0.1:6379> lindex strlist 0
"one"
127.0.0.1:6379> lindex strlist 1
"two"
127.0.0.1:6379> lindex strlist 2
"three"

127.0.0.1:6379> lrange strlist 0 -1
1) "one"
2) "two"
3) "three"
4) "four"
5) "five"
6) "six"
7) "seven"

lset命令

lset命令在指定的index位置修改该元素。如果该index位置,超过了list的范围则会报错。

127.0.0.1:6379> help lset

  LSET key index element
  summary: Set the value of an element in a list by its index
  since: 1.0.0
  group: list
127.0.0.1:6379> lset test 4 test5
(error) ERR index out of range
127.0.0.1:6379> lset test 3 test5
OK
127.0.0.1:6379> lrange test 0 -1
1) "test1"
2) "test2"
3) "test0"
4) "test5"

 

linsert命令

linsert命令在指定某个支点元素前面或后面插入该元素。如果指定的支点元素不存在,则不会插入该元素。

127.0.0.1:6379> help linsert

  LINSERT key BEFORE|AFTER pivot element
  summary: Insert an element before or after another element in a list
  since: 2.2.0
  group: list

127.0.0.1:6379> lrange test 0 -1
1) "test1"
2) "test0"
127.0.0.1:6379> linsert test before "test0" test2
(integer) 3
127.0.0.1:6379> lrange test 0 -1
1) "test1"
2) "test2"
3) "test0"
127.0.0.1:6379> linsert test after "test0" test3
(integer) 4
127.0.0.1:6379> lrange test 0 -1
1) "test1"
2) "test2"
3) "test0"
4) "test3"

 

lmove命令

lmove命令是原子性操作,这个命令会将源list中的元素,pop出来然后再push到另一个列表中。pop和push的方向需要在lmove命令中指定。

127.0.0.1:6379> lpush source test2 test1 test0
(integer) 3
127.0.0.1:6379> lrange source 0 -1
1) "test0"
2) "test1"
3) "test2"
127.0.0.1:6379> lmove source dest right right
"test2"
127.0.0.1:6379> lrange source 0 -1
1) "test0"
2) "test1"
127.0.0.1:6379> lrange dest 0 -1
1) "test2"
127.0.0.1:6379> lmove source dest right right
"test1"
127.0.0.1:6379> lrange source 0 -1
1) "test0"
127.0.0.1:6379> lrange dest 0 -1
1) "test2"
2) "test1"
127.0.0.1:6379> lmove source dest right right
"test0"
127.0.0.1:6379> lrange source 0 -1
(empty array)
127.0.0.1:6379> lrange dest 0 -1
1) "test2"
2) "test1"
3) "test0"

 

lpos命令

lpos命令返回list中指定元素的位置。

127.0.0.1:6379> help lpos

  LPOS key element [RANK rank] [COUNT num-matches] [MAXLEN len]
  summary: Return the index of matching elements on a list
  since: 6.0.6
  group: list

127.0.0.1:6379> lrange test 0 -1
1) "test5"
2) "test4"
3) "test3"
4) "test2"
5) "test1"
6) "test0"
127.0.0.1:6379> lpos test test1
(integer) 4
127.0.0.1:6379> lpos test test5
(integer) 0

ltrim命令

ltrim命令将一个list修剪到指定范围,范围外其他元素将被删掉。

127.0.0.1:6379> help ltrim

  LTRIM key start stop
  summary: Trim a list to the specified range
  since: 1.0.0
  group: list

127.0.0.1:6379> lrange test 0 -1
1) "test5"
2) "test4"
3) "test3"
4) "test2"
5) "test1"
6) "test0"

127.0.0.1:6379> ltrim test 2 4
OK
127.0.0.1:6379> lrange test 0 -1
1) "test3"
2) "test2"
3) "test1"

 rpoplpush 命令

rpoplpush删除一个list最后一位的element然后将其push到另一个list的前面位置。

127.0.0.1:6379> lrange tset 0 -1
1) "test03"
2) "test02"
3) "test01"
4) "test00"
127.0.0.1:6379> lrange test 0 -1
1) "test4"
2) "test3"
3) "test2"
4) "test1"
127.0.0.1:6379> rpoplpush test tset
"test1"

127.0.0.1:6379> lrange test 0 -1
1) "test4"
2) "test3"
3) "test2"
127.0.0.1:6379> lrange tset 0 -1
1) "test1"
2) "test03"
3) "test02"
4) "test01"
5) "test00"

 

posted @ 2022-08-11 14:21  panzq  阅读(302)  评论(0编辑  收藏  举报