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"