赞
踩
有道无术,术尚可求,有术无道,止于术。
本系列Redis 版本 7.2.5
源码地址:https://gitee.com/pearl-organization/study-redis-demo
Redis List
(列表)是一种基于双向链表的数据结构,允许包含重复的元素,支持在列表的头部和尾部添加或删除元素。
List
相关的所有命令:
命名 | 描述 |
---|---|
LMOVE | 删除源列表的第一个或最后一个元素,并移入到目标列表中的第一个或最后一个位置 |
LMPOP | 弹出一个或多个元素 |
BLMOVE | LMOVE 的阻塞变体 |
BLMPOP | LMPOP 的阻塞变体 |
BLPOP | 移出并获取列表的第一个元素 |
BRPOP | 移出并获取列表的最后一个元素 |
BRPOPLPUSH | 从列表中弹出一个值,并将该值插入到另外一个列表中并返回它 |
LINDEX | 通过索引获取列表中的元素 |
LINSERT | 在列表的元素前或者后插入元素 |
LLEN | 获取列表长度 |
LPOP | 移出并获取列表的第一个元素 |
LPOS | 返回列表中匹配元素的索引 |
LPUSH | 将一个或多个值插入到列表头部 |
LPUSHX | 将一个值插入到已存在的列表头部 |
LRANGE | 获取列表指定范围内的元素 |
LREM | 移除列表元素 |
LSET | 通过索引设置列表元素的值 |
LTRIM | 对一个列表进行修剪 |
RPOP | 移除并获取列表最后一个元素 |
RPOPLPUSH | 移除列表的最后一个元素,并将该元素添加到另一个列表并返回 |
RPUSH | 在列表中添加一个或多个值 |
RPUSHX | 为已存在的列表添加值 |
RPUSH
向存存储在 key
中的列表的尾部插入所有指定的值(多个时依次从左到右按序从列表尾部插入)。如果 key
不存在,那么会创建一个空的列表然后再进行 push
操作。 返回值为执行操作后的列表长度,当 key
保存的不是列表,那么会返回一个错误。
基本语法:
RPUSH key element [element ...]
示例:
redis> RPUSH mylist "hello"
(integer) 1
redis> RPUSH mylist "world"
(integer) 2
redis> LRANGE mylist 0 -1
1) "hello"
2) "world"
LPUSH
用于将一个或多个值插入到列表的头部,返回值为执行操作后列表的长度。
注意事项:
key
不存在,那么在进行 push
操作前会创建一个空列表。key
对应的值不是 List
类型,那么会返回一个错误。push
进入列表,只需在命令末尾加上多个指定的参数。元素按在参数中出现的顺序,从左到右依次插入到 list 的头部。基本语法:
LPUSH key element [element ...]
示例:
redis> LPUSH mylist "world"
(integer) 1
redis> LPUSH mylist "hello"
(integer) 2
redis> LRANGE mylist 0 -1
1) "hello"
2) "world"
LRANGE
用于返回列表中指定区间内的元素,区间以偏移量 START
和 END
指定。 其中 0
表示列表的第一个元素, 1
表示列表的第二个元素,以此类推。以 -1
表示列表的最后一个元素, -2
表示列表的倒数第二个元素,以此类推。
基本语法:
LRANGE key start stop
注意事项:
stop
下标也在 LRANG
E 命令的取值范围之内(闭区间),这和某些语言的区间函数可能不一致,例如执行 LRANGE list 0 10
,结果是一个包含 11
个元素的列表start
下标比列表的最大下标还要大时,那么会返回一个空列表。示例:
redis> RPUSH mylist "one" (integer) 1 redis> RPUSH mylist "two" (integer) 2 redis> RPUSH mylist "three" (integer) 3 redis> LRANGE mylist 0 0 1) "one" redis> LRANGE mylist -3 2 1) "one" 2) "two" 3) "three" redis> LRANGE mylist -100 100 1) "one" 2) "two" 3) "three" redis> LRANGE mylist 5 10 (empty list or set)
LINDEX
返回列表 key
里索引 index
位置存储的元素。 index
下标是从 0
开始索引的,所以 ``0 是表示第一个元素, 1
表示第二个元素,并以此类推。 负数索引用于指定从列表尾部开始索引的元素,在这种方法下,-1
表示最后一个元素,-2
表示倒数第二个元素,并以此往前推。当index
超出索引范围时返回 nil
。
基本语法:
LINDEX key index
示例:
redis> LPUSH mylist "World"
(integer) 1
redis> LPUSH mylist "Hello"
(integer) 2
redis> LINDEX mylist 0
"Hello"
redis> LINDEX mylist -1
"World"
redis> LINDEX mylist 3
(nil)
LREM
用于从列表 key
中删除前 count
个值等于 element
的元素,返回值为删除元素个数。这个 count
参数通过下面几种方式影响这个操作:
count > 0
: 从头到尾删除值为 value
的元素。count < 0
:从尾到头删除值为 value
的元素。count = 0
:移除所有值为 value
的元素。例如, LREM list -2 “hello”
会从列表中删除最后两个出现的 “hello”
。
基本语法:
LREM key count element
示例:
redis> RPUSH mylist "hello"
(integer) 1
redis> RPUSH mylist "hello"
(integer) 2
redis> RPUSH mylist "foo"
(integer) 3
redis> RPUSH mylist "hello"
(integer) 4
redis> LREM mylist -2 "hello"
(integer) 2
redis> LRANGE mylist 0 -1
1) "hello"
2) "foo"
LLEN
用于返回存储在 key
中的列表长度。 如果 key
不存在,则 key
被解释为一个空列表,返回 0
。 如果 key
不是列表类型,返回一个错误。
基本语法:
LLEN key
示例:
redis> LPUSH mylist "World"
(integer) 1
redis> LPUSH mylist "Hello"
(integer) 2
redis> LPUSH mylist "Redis.com.cns"
(integer) 3
redis> LLEN mylist
(integer) 3
LPOP
命令用于删除并返回存储在 key
中的列表的第一个元素。返回值为列表的首元素,key
不存在的时候返回 nil
。
基本语法:
LPOP key
示例:
redis> RPUSH mylist "one"
(integer) 1
redis> RPUSH mylist "two"
(integer) 2
redis> RPUSH mylist "three"
(integer) 3
redis> LPOP mylist
"one"
redis> LRANGE mylist 0 -1
1) "two"
2) "three"
RPOP
用于移除并返回列表 key
的最后一个元素。返回值为最后一个元素的值,key
不存在时返回 nil
。
基本语法:
RPOP key
示例:
redis> RPUSH mylist "one"
(integer) 1
redis> RPUSH mylist "two"
(integer) 2
redis> RPUSH mylist "three"
(integer) 3
redis> RPOP mylist
"three"
redis> LRANGE mylist 0 -1
1) "one"
2) "two"
LSET
用于设置列表 key
中 index
位置的元素值,当 index
超出列表索引范围时会返回错误 ERR ERR index out of range
。
基本语法:
LSET key index element
示例:
redis> RPUSH mylist "one"
(integer) 1
redis> RPUSH mylist "two"
(integer) 2
redis> RPUSH mylist "three"
(integer) 3
redis> LSET mylist 0 "four"
"OK"
redis> LSET mylist -2 "five"
"OK"
redis> LRANGE mylist 0 -1
1) "four"
2) "five"
3) "three"
Redis List
提供了高效的列表结构操作,可以方便地进行数据的插入、删除和访问。
主要优点如下:
O(1)
。LPUSH
和 LPOP
操作创建栈,支持 RPUSH
和 BRPOP
操作创建队列。Redis
是内存中的数据结构,可以作为高速缓存使用。应用场景:
SORT
命令可以根据分数来排序Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。