列表类型
列表类型可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者获取列表中的某个字段。
列表类型是使用双向列表实现的,所以向列表两端添加元素的时间复杂度是常数,越接近两端的元素,查询速度就越快。
一个列表类型最多能容纳2^32-1个元素。
PUSH
LPUSH和RPUSH命令用于向列表两端增加元素,代码如下:
127.0.0.1:6379> LPUSH handsome sunshine yang
(integer) 2
127.0.0.1:6379> RPUSH handsome architect
(integer) 3
返回值表示增加元素后列表的长度。
POP
LPOP和RPOP命令用于从列表两端弹出元素。这两个命令执行两步操作,第一步是将列表两端的元素从列表移除,第二步是返回被移除的元素值,代码如下:
127.0.0.1:6379> LPOP handsome
"yang"
127.0.0.1:6379> RPOP handsome
"architect"
上面的4个命令可以使用列表类型来模拟栈和队列的操作,栈就使用LPUSH和LPOP命令或者RPUSH和RPOP命令,队列就使用LPUSH和RPOP或者RPUSH和LPOP。
LLEN
LLEN命令用于获取列表中元素的个数,复杂度为O(1),代码如下:
127.0.0.1:6379> LLEN handsome
(integer) 1
LRANGE
LRANGE命令用来获取列表中的某一片段,Redis的列表起始索引是0。
127.0.0.1:6379> LRANGE handsome 1 -1
1) "yang"
2) "song"
3) "lin"
这是后就有个一个问题了,你说了这么多,我都不知道列表里有什么,我想看看列表所有的东西,这就需要举一反三一下,代码如下:
127.0.0.1:6379> LRANGE handsome 0 -1
1) "sunshine"
2) "yang"
3) "song"
4) "lin"
关于LRANGE的一些特殊情况,如果起始索引的位置在终止索引的位置的后面,则返回空。如果终止索引的位置大于实际范围,则会返回到列表最右边的元素,代码如下:
127.0.0.1:6379> LRANGE handsome 1 0
(empty list or set)
127.0.0.1:6379> LRANGE handsome 1 999
1) "yang"
2) "song"
3) "lin"
LREM
LREM(LREM key count value)命令用来删除列表中前count个值为value的元素,返回值是实际删除的元素个数。根据count值大小的不同,LREM命令的执行方式会略有差异,解释如下:
- 当count>0时,LREM命令会从列表的左手边开始删除前count个值为value的元素。
- 当count<0时,LREM命令会从列表的右手边开始删除前count个值为value的元素。
- 当count=0时,LREM命令会删除所有值为value的元素。
代码如下:
127.0.0.1:6379> LPUSH people yang java xiang java liu js architect java hao js
(integer) 10
127.0.0.1:6379> LRANGE people 0 -1
1) "js"
2) "hao"
3) "java"
4) "architect"
5) "js"
6) "liu"
7) "java"
8) "xiang"
9) "java"
10) "yang"
127.0.0.1:6379> LREM people 2 java
(integer) 2
127.0.0.1:6379> LREM people -2 js
(integer) 2
127.0.0.1:6379> LREM people 10 java
(integer) 1
127.0.0.1:6379> LREM people 0 java
(integer) 3
各位都是未来的架构师,智商都在180以上,举一反十更是家常便饭,你们便会想,既然有LREM,肯定有RREM吧,代码如下:
127.0.0.1:6379> RREM people 0 java
(error) ERR unknown command 'RREM'
呵呵。