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命令会删除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"