List(列表)
List(列表)
基本的数据类型,列表

在redis里面,我们可以把list玩成栈、队列、阻塞队列!
所有的list命令都是用L开头的,redis不区分大小写命令
########################################################
127.0.0.1:6379> LPUSH list one # 将一个或多个值插入到列表头部(左)
(integer) 1
127.0.0.1:6379> LPUSH list two
(integer) 2
127.0.0.1:6379> LPUSH list three
(integer) 3
127.0.0.1:6379> LRANGE list 0 -1 # 获取list中的值!
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> LRANGE list 0 1 # 通过区间获取具体的值!
1) "three"
2) "two"
127.0.0.1:6379> RPUSH list zero # 将一个值或者多个值,插入到列表尾部 (右)
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
4) "zero"
########################################################
127.0.0.1:6379> LRANGE list 0 -1
1) "three"
2) "two"
3) "one"
4) "zero"
127.0.0.1:6379> lpop list # 移除list的最左元素
"three"
127.0.0.1:6379> rpop list # 移除list的最右元素
"zero"
127.0.0.1:6379> LRANGE list 0 -1
1) "two"
2) "one"
########################################################
127.0.0.1:6379> LRANGE list 0 -1
1) "two"
2) "one"
127.0.0.1:6379> LINDEX list 1 # 通过下标获得list中的某一个值!
"one"
127.0.0.1:6379> LINDEX list 0
"two"
127.0.0.1:6379> llen list # 返回列表的长度
(integer) 2
########################################################
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "three"
3) "two"
4) "one"
127.0.0.1:6379> lrem list 1 one # 移除list集合中指定个数的value,精确匹配
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "three"
3) "two"
127.0.0.1:6379> lrem list 1 two
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "three"
127.0.0.1:6379> lrem list 2 three
(integer) 2
127.0.0.1:6379> lrange list 0 -1
(empty array)
########################################################
# trim 修剪
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> RPUSH mylist hello hello1 hello2 hello3
(integer) 4
127.0.0.1:6379> lrange mylist 0 -1
1) "hello"
2) "hello1"
3) "hello2"
4) "hello3"
127.0.0.1:6379> ltrim mylist 1 2 # 通过下标截取指定的长度,这个list已经被改变了,截断了只剩下截取的元素!
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "hello1"
2) "hello2"
########################################################
# rpoplpush 组合命令,移除列表最后一个元素至新的列表中!
127.0.0.1:6379> rpoplpush mylist myotherlist
"hello2"
127.0.0.1:6379> lrange mylist 0 -1
1) "hello1"
127.0.0.1:6379> lrange myotherlist 0 -1
1) "hello2"
########################################################
# lset 将列表中指定下标的值替换为另外一个值,更新操作
127.0.0.1:6379> exists list
(integer) 0
127.0.0.1:6379> lset list 0 item #不存在就会报错
(error) ERR no such key
127.0.0.1:6379> lpush list value
(integer) 1
127.0.0.1:6379> LRANGE list 0 0
1) "value"
127.0.0.1:6379> lset list 0 item # 存在则更新当前下标的值
OK
127.0.0.1:6379> LRANGE list 0 0
1) "item"
127.0.0.1:6379> lset list 1 item1
(error) ERR index out of range
########################################################
# linsert 将某个具体的value插入到列表中某个元素的前面或者后面!
127.0.0.1:6379> FLUSHALL
OK
127.0.0.1:6379> rpush mylist hello world
(integer) 2
127.0.0.1:6379> LINSERT mylist before world my
(integer) 3
127.0.0.1:6379> LRANGE mylist 0 -1
1) "hello"
2) "my"
3) "world"
127.0.0.1:6379> LINSERT mylist after world new
(integer) 4
127.0.0.1:6379> LRANGE mylist 0 -1
1) "hello"
2) "my"
3) "world"
4) "new"
小结
- 他实际上是一个链表,before node after,left ,right都可以插入值
- 如果key不存在,创建新的链表
- 如果key存在,新增内容
- 如果移除了所有值,空链表,也代表不存在!
- 在两边插入或者改动值,效率最高!中间元素,相对来说效率会低一点~
消息排队!消息队列(Lpush Rpop),栈(Lpush,Lpop)!

浙公网安备 33010602011771号