Redis五大数据类型——List

Redis五大数据类型——List

基本的数据类型:列表

在redis里面,我们可以把list当作队列,或栈来使用。

在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
1) "three"
2) "two"
3) "one"

127.0.0.1:6379> RPUSH list four		# 将一个值或多个值,插入到列表尾部(右,队列)
(integer) 4
127.0.0.1:6379> LRANGE list 0 -1	# 获取列表中的所有值
1) "three"
2) "two"
3) "one"
4) "four"

127.0.0.1:6379> LPOP list			# 移除最左边的元素(栈),有返回值,返回值是被移除的值
"three"
127.0.0.1:6379> RPOP list			# 移除最右边的元素(队列),有返回值,返回值是被移除的值
"four"
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			# 查看list长度
(integer) 2

# ==========
127.0.0.1:6379> keys *
1) "list"
127.0.0.1:6379> LRANGE list 0 -1
1) "three"
2) "four"
3) "three"
4) "two"
5) "one"

127.0.0.1:6379> LRANGE list 0 -1
1) "three"
2) "four"
3) "three"
4) "two"

127.0.0.1:6379> LREM list 1 three # LREM key count element,移除列表key中count数量的指定元素
(integer) 1
127.0.0.1:6379> LRANGE list 0 -1
1) "four"
2) "three"
3) "two"

127.0.0.1:6379> LPUSH list three
(integer) 4
127.0.0.1:6379> LREM list 2 three
(integer) 2
127.0.0.1:6379> LRANGE list 0 -1
1) "four"
2) "two"

# ==========
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> RPUSH list "v1" "v2" "v3" "v4"
(integer) 4
127.0.0.1:6379> LTRIM list 1 2		# 通过下标截取指定的长度
OK
127.0.0.1:6379> LRANGE list 0 -1	# 这个list已经被改变了,发现只剩下了截取的元素
1) "v2"
2) "v3"

# ==========
127.0.0.1:6379> RPUSH list "v1" "v2" "v3" "v4"
(integer) 4
127.0.0.1:6379> RPOPLPUSH list otherl	# 移除列表中的最后一个元素,并把该元素添加到新的列表中
"v4"
127.0.0.1:6379> lrange list 0 -1
1) "v1"
2) "v2"
3) "v3"
127.0.0.1:6379> lrange otherl 0 -1
1) "v4"

# ==========
127.0.0.1:6379> LPUSH list v1
(integer) 1
127.0.0.1:6379> LSET list 0 v2		# 设置名为key的列表中,下标为index的值为element
OK
127.0.0.1:6379> LRANGE list 0 -1	# 发现相当于做了一个update的操作
1) "v2"
127.0.0.1:6379> LSET list 1 v3		# 下标为1的元素不存在,所以报错
(error) ERR index out of range

# ==========
# LINSERT key BEFORE|AFTER pivot element	# 在名为key的列表中,在某个值的前面或后面插入一个值
127.0.0.1:6379> RPUSH list "v1" "v2"
(integer) 2
127.0.0.1:6379> LINSERT list before "v2" "v3"
(integer) 3
127.0.0.1:6379> LRANGE list 0 -1
1) "v1"
2) "v3"
3) "v2"

127.0.0.1:6379> LINSERT list after v3 v4
(integer) 4
127.0.0.1:6379> LRANGE list 0 -1
1) "v1"
2) "v3"
3) "v4"
4) "v2"

小结

  • 列表实际上是一个链表,before Node after,left,right都可以插入值
  • 如果key不存在,创建新的链表
  • 如果key存在,新增内容
  • 如果移除了key,空链表,也代表不存在
  • 在两边插入或改动值,效率最高。对于中间元素,相对来说效率会低一些

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

原文地址:https://www.cnblogs.com/liuhuan086/p/13580275.html