开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第8天,点击查看活动详情
Redis List是一个字符串列表,它按照元素的插入顺序排序。我们在使用List时可以在它的头部或者尾部插入数据和取出数据;
下面我们开始介绍一下List的常用命令:
LPUSH命令
lpush key value1 value2 ......
示例:
redis> lpush programming_language java go rust
3
redis> lrange programming_language 0 3
0 rust
1 go
2 java
lpush表示从左边依次插入元素;上述示例就是从列表的左边先插入java,再插入go,最后插入rust;所以最后通过lrange命令查询出来的结果是rust、go、java,此时rust是在列表的最左边的;
RPUSH命令
rpush key value1 value2 ......
示例:
redis> rpush programming_language lua kotlin javascript
6
redis> lrange programming_language 0 6
0 rust
1 go
2 java
3 lua
4 kotlin
5 javascript
和lpush类似,rpush表示从右边依次插入元素,在上一个示例的基础上,我们从右边依次插入了lua、kotlin、javascript,最后确实如我们预期的一样,它们都在列表的最右边;
LPOP命令
lpop key
示例:
redis> lpop programming_language
rust
redis> lrange programming_language 0 6
0 go
1 java
2 lua
3 kotlin
4 javascript
我们发现使用lpop命令后,返回了rust,并且列表中已经没有了rust;说明lpop命令把rust元素从列表左边弹出来了;
lpop命令表示从左边移除并返回列表的第一个元素;
RPOP命令
rpop key
示例:
redis> rpop programming_language
javascript
redis> lrange programming_language 0 6
0 go
1 java
2 lua
3 kotlin
rpop命令和lpop命令类似,它表示从右边移除并返回列表的第一个元素,所以结果弹出了javascript;
BLPOP命令
blpop key timeout[单位:秒]
示例:
redis> blpop programming_language 2
0 programming_language
1 go
blpop表示带阻塞地从列表左边移除并返回第一个元素;如果列表中没有元素,那么就会阻塞2秒钟,要么2秒内有元素push进来然后被pop返回,要么2秒后返回null;
BRPOP命令
brpop key timeout[单位:秒]
示例:
redis> brpop programming_language 2
0 programming_language
1 kotlin
和blpop类似,只不过brpop是从右边移除并返回元素;
LLEN命令
llen key
示例:
redis> llen programming_language
2
redis> lrange programming_language 0 6
0 java
1 lua
llen命令是用来获取列表长度的;
LRANGE命令
lrange key start end
示例:
redis> lrange programming_language 0 6
0 java
1 lua
lrange命令用来获取列表指定范围内的元素;
LINDEX命令
lindex key index
示例:
redis> lrange programming_language 0 6
0 java
1 lua
redis> lindex programming_language 0
java
lindex命令和数组根据索引值获取元素一样,lindex programming_language 0表示返回索引0位置的元素;
LREM命令
lrem key count value
示例:
redis> lpush my_list hello hello hello
3
redis> lrem my_list 2 hello
2
redis> lrange my_list 0 10
0 hello
lrem中的count参数需要特别注意:
count>0表示从左边开始搜索,并删除与value相同的count个元素;count<0表示从右边开始搜索,并删除与value相同元素,数量为count的绝对值;count=0表示删除所有与value相同的元素;
LSET命令
lset key index value
示例:
redis> lrange my_list 0 10
0 hello
1 hello
2 hello
redis> lset my_list 1 world
OK
redis> lrange my_list 0 10
0 hello
1 world
2 hello
lset命令表示通过索引设置列表元素的值;
LTRIM命令
ltrim key start stop
示例:
redis> lrange my_list 0 10
0 hello
1 world
2 hello
redis> ltrim my_list 1 1
OK
redis> lrange my_list 0 10
0 world
ltrim表示对列表指定区域进行修剪,其余元素全部删除;相当于java中的subtring的效果;
LPUSHX命令
lpushx key value
示例:
redis> lpush tmp_list foo
1
redis> lpushx tmp_list hello
2
redis> lpushx second_list world
0
redis> lrange tmp_list 0 -1
0 hello
1 foo
lpushx在列表存在的情况下,会向列表左边插入数据;如果列表不存在,那么不会有效果;
RPUSHX命令
rpushx key value
示例:
redis> lpush tmp_list foo
1
redis> rpushx tmp_list hello
2
redis> lrange tmp_list 0 -1
0 foo
1 hello
rpushx与lpushx类型,需要在列表存在的情况下才会生效,rpushx则是向右边插入元素;
LINSERT命令
linsert key [before|after] pivot value
示例:
redis> lpush mylist hello
1
redis> lpush mylist world
2
redis> linsert mylist before "world" "redis"
3
redis> lrange mylist 0 -1
0 redis
1 world
2 hello
linsert命令表示将 value值插入 pivot值前面或者后面;
BRPOPLPUSH命令
brpoplpush source destination timeout
示例:
redis> lrange mylist 0 -1
0 redis
1 world
2 hello
redis> brpoplpush mylist target_list 2
hello
redis> lrange target_list 0 -1
0 hello
redis> lrange mylist 0 -1
0 redis
1 world
brpoplpush命令是在操作两个列表,从第一个列表的右边移除元素,并插入第二个列表的左边,并设置超时时间;
RPOPLPUSH命令
rpoplpush source destination
这个命令就是上一个命令的非阻塞命令,它不需要设置超时时间;