基本的数据类型,列表

在redis里面,我们可以把redis当做一个栈、队列、阻塞队列

所有的List命令都是以 l开头的

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 rightR # # 将一个值或多个值插入到列表头部(右)
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
4) "rightR"

移除

LPOP (左边移除) 和 RPOP (右边移除)

127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
3) "one"
4) "rightR"
127.0.0.1:6379> Lpop list # 移除列表的第一个元素
"three"
127.0.0.1:6379> Rpop list
"rightR"
127.0.0.1:6379> lrange list 0 -1 # 移除列表的最后一个元素
1) "two"
2) "one"

获取某一个key的index下标

127.0.0.1:6379> lindex list 1 # 通过下标获得list中的某一个值
"one"
127.0.0.1:6379> lindex list 2
(nil)
127.0.0.1:6379> lindex list 0
"two"
127.0.0.1:6379> 

查询List长度

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> llen list # 返回列表的长度
(integer) 3

移除指定的值

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 three
(integer) 1
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "two"
127.0.0.1:6379> lpush list three
(integer) 3
127.0.0.1:6379> lrange list 0 -1
1) "three"
2) "three"
3) "two"
127.0.0.1:6379> lrem list 2 three
(integer) 2
127.0.0.1:6379> lrange list 0 -1
1) "two"

list集合截断

127.0.0.1:6379> rpush mylist "hello"
(integer) 1
127.0.0.1:6379> rpush mylist "hello1"
(integer) 2
127.0.0.1:6379> rpush mylist "hello2"
(integer) 3
127.0.0.1:6379> rpush mylist "hello3"
(integer) 4
127.0.0.1:6379> ltrim mylist 1 2 # 通过下标截取指定长度,这个list已经被改变了,只剩下截取的元素
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "hello1"
2) "hello2"

移除列表最后一个元素,并将其添加到新的列表中

127.0.0.1:6379> rpush mylist "hello"
(integer) 1
127.0.0.1:6379> rpush mylist "hello1"
(integer) 2
127.0.0.1:6379> rpush mylist "hello2"
(integer) 3
127.0.0.1:6379> rpoplpush mylist myotherlist # 移除列表的最后一个元素,将他移动到新的列表中!
"hello2"
127.0.0.1:6379> lrange mylist 0 -1 # 查看原来的列表
1) "hello"
2) "hello1"
127.0.0.1:6379> lrange myotherlist 0 -1 # 查看目标列表中,确实存在该值
1) "hello2"

总结

  • 它实际上是一个链表,before Node after , left , right 都可以插入值
  • 如果key不存在,创建新的链表
  • 如果key存在,新增内容
  • 如果移除所有的值,空链表,也代表不存在
  • 在两边插入或者改动值,效率最高
  • 如果修改中间元素,效率会低一点

消息排队 ,消息队列 (Lpush Rpop) | 栈 (Lpush Lpop)

最后修改:2021 年 03 月 06 日
如果觉得我的文章对你有用,请随意赞赏