目录
1、lpush/rpush
2、lrange
3、lpop/rpop
4、lindex
5、llen
6、lrem
7、ltrim
8、lset
9、linsert
10、lmove
11、list类型使用案例
1、lpush/rpush
命令:lpush/rpush key element [element ...]
说明:
1)lpush:将值从左往右插入,例如:lpush list1 a b c;会将c作为第一个元素,b作为第二个元素,a作为第三个元素
127.0.0.1:6379> lpush list1 l1 l2 l3 l4 l5
(integer) 5
127.0.0.1:6379> lrange list1 0 -1
1) "l5"
2) "l4"
3) "l3"
4) "l2"
5) "l1"
数据添加示例图:
2)rpush:将值从右往左插入,例如:rpush list1 a b c;会将a作为第一个元素,b作为第二个元素,c作为第三个元素
127.0.0.1:6379> rpush list2 l1 l2 l3 l4 l5
(integer) 5
127.0.0.1:6379> lrange list2 0 -1
1) "l1"
2) "l2"
3) "l3"
4) "l4"
5) "l5"
数据添加示例图:
2、lrange
命令:lrange key start end
说明:
1)返回存储在键处的list列表中的指定元素。偏移开始和停止是基于零的索引,0是列表的第一个元素(列表的头),1是下一个元素,依此类推。
127.0.0.1:6379> lrange list2 0 -1
1) "l1"
2) "l2"
3) "l3"
4) "l4"
5) "l5"
127.0.0.1:6379> lrange list2 1 2
1) "l2"
2) "l3"
2)偏移量也可以是负数,表示从末尾开始的偏移量。例如,-1是列表的最后一个元素,-2是倒数第二个元素,依此类推。
127.0.0.1:6379> lrange list2 2 -1
1) "l3"
2) "l4"
3) "l5"
127.0.0.1:6379> lrange list2 2 -2
1) "l3"
2) "l4"
3、lpop/rpop
命令: lpop/rpop key [count]
说明:
1)lpop:删除并返回存储在键处的list列表的第一个元素。默认情况下,该命令会从列表的开头弹出一个元素。如果提供了可选的count参数,则弹出count个元素,具体取决于列表的长度。
127.0.0.1:6379> lpop list2
"l1"
127.0.0.1:6379> lrange list2 0 -1
1) "l2"
2) "l3"
3) "l4"
4) "l5"
127.0.0.1:6379> lpop list2 3
1) "l2"
2) "l3"
3) "l4"
127.0.0.1:6379> lrange list2 0 -1
1) "l5"
2)rpop:删除并返回存储在键处的list列表的最后一个元素。默认情况下,该命令会从列表的末尾弹出一个元素。如果提供了可选的count参数,则弹出count个元素,具体取决于列表的长度。
127.0.0.1:6379> rpop list1
"l1"
127.0.0.1:6379> lrange list1 0 -1
1) "l5"
2) "l4"
3) "l3"
4) "l2"
127.0.0.1:6379> rpop list1 3
1) "l2"
2) "l3"
3) "l4"
127.0.0.1:6379> lrange list1 0 -1
1) "l5"
4、lindex
命令:lindex key index
说明:
1)返回存储在键的list列表中索引处的元素。索引是从零开始的,所以0表示第一个元素,1表示第二个元素,依此类推。
127.0.0.1:6379> lrange list1 0 -1
1) "l5"
2) "l4"
3) "l3"
4) "l2"
5) "l1"
127.0.0.1:6379> lindex list1 2
"l3"
2)负索引可以用于指定从列表尾部开始的元素。这里,-1表示最后一个元素,-2表示倒数第二个元素,依此类推。
127.0.0.1:6379> lindex list1 -2
"l2"
5、llen
命令: llen key
说明:获取列表中元素的个数
127.0.0.1:6379> lrange list1 0 -1
1) "l5"
2) "l4"
3) "l3"
4) "l2"
5) "l1"
127.0.0.1:6379> llen list1
(integer) 5
6、lrem
命令:lrem key count element
说明:从存储在键处的列表中删除与元素相等的元素的count参数个数。count参数通过以下方式影响操作:
1)count > 0:移除与从头到尾移动的元素相等的元素。
127.0.0.1:6379> lpush lrem1 l1 l1 l2 l1
(integer) 4
127.0.0.1:6379> lrem lrem1 2 l1
(integer) 2
127.0.0.1:6379> lrange lrem1 0 -1
1) "l2"
2) "l1"
从列表左到右,移除两个 l1 元素
2)count<0:移除与从尾到头移动的元素相等的元素。
127.0.0.1:6379> lpush lrem2 l1 l1 l2 l1
(integer) 4
127.0.0.1:6379> lrem lrem2 -2 l1
(integer) 2
127.0.0.1:6379> lrange lrem2 0 -1
1) "l1"
2) "l2"
从列表右到左,移除两个 l1 元素
3)count=0:删除与元素相等的所有元素。
127.0.0.1:6379> lpush lrem3 l1 l1 l2 l1
(integer) 4
127.0.0.1:6379> lrem lrem3 0 l1
(integer) 3
127.0.0.1:6379> lrange lrem3 0 -1
1) "l2"
7、ltrim
命令:ltrim key start stop
说明:剪切现有列表,使其仅包含指定范围的指定元素。
1)start和stop都是基于零的索引,其中0是列表的第一个元素(列表的头),1是下一个元素,依此类推。
127.0.0.1:6379> lpush ltrim1 l1 l2 l3 l4 l5
(integer) 5
127.0.0.1:6379> ltrim ltrim1 1 3
OK
127.0.0.1:6379> lrange ltrim1 0 -1
1) "l4"
2) "l3"
3) "l2"
2)start和end也可以是负数,表示与列表末尾的偏移量,其中-1是列表的最后一个元素,-2是倒数第二个元素,依此类推。
127.0.0.1:6379> lpush ltrim2 l1 l2 l3 l4 l5
(integer) 5
127.0.0.1:6379> ltrim ltrim2 1 -3
OK
127.0.0.1:6379> lrange ltrim2 0 -1
1) "l4"
2) "l3"
注意:超出范围的索引不会产生错误:如果开始大于列表的结束,结果将是一个空列表(这会导致键被删除)。如果end大于列表的末尾,Redis会将其视为列表的最后一个元素。
8、lset
命令:lset key index element
说明:更改列表指定下标的元素,索引参数的使用与lindex类似。
127.0.0.1:6379> lpush lset1 l1 l2 l3 l4 l5
(integer) 5
127.0.0.1:6379> lset lset1 3 lll3
OK
127.0.0.1:6379> lrange lset1 0 -1
1) "l5"
2) "l4"
3) "l3"
4) "lll3"
5) "l1"
9、linsert
命令:linsert key <before | after> pivot element
说明:在指定的第一个相同的值之前或之后的键处插入存储在列表中的元素。
127.0.0.1:6379> lpush linsert1 l1 l2 l3 l1 l2 l3
(integer) 6
127.0.0.1:6379> linsert linsert1 before l1 llll1
(integer) 7
127.0.0.1:6379> lrange linsert1 0 -1
1) "l3"
2) "l2"
3) "llll1"
4) "l1"
5) "l3"
6) "l2"
7) "l1"
10、lmove
命令:lmove source destination right left
说明:
1)原子化地返回并删除存储在源位置的列表的最后一个元素(尾部),并将该元素推送到存储在目的地的列表的第一个元素(头部),或者反之。
127.0.0.1:6379> lpush list2 r1 r2 r3
(integer) 3
127.0.0.1:6379> lpush list1 l1 l2 l3
(integer) 3
127.0.0.1:6379> lmove list1 list2 right left
"l1"
127.0.0.1:6379> lrange list1 0 -1
1) "l3"
2) "l2"
127.0.0.1:6379> lrange list2 0 -1
1) "l1"
2) "r3"
3) "r2"
4) "r1"
2)如果源不存在,则返回值nil,并且不执行任何操作。如果源和目标相同,则该操作相当于从列表中删除最后一个元素,并将其作为列表的第一个元素,因此可以将其视为列表旋转命令。
127.0.0.1:6379> lrange list2 0 -1
1) "l1"
2) "r3"
3) "r2"
4) "r1"
127.0.0.1:6379> lmove list2 list2 left right
"l1"
127.0.0.1:6379> lrange list2 0 -1
1) "r3"
2) "r2"
3) "r1"
4) "l1"
示例图:
ps:此命令替代在Redis version 6.2.0 过时的命令:rpoplpush
11、list类型使用案例
假设小明在某个发布科技文章的网站创建账号并关注了两个写文章的博主(博主A、博主B),某一天博主A和B分别发布了一篇文章,id为051和072,此时,文章id就会添加进关注了两位博主的列表中,也就是小明账号的列表中
127.0.0.1:6379> lpush likearticle:xiaomId 051 072
(integer) 2
此处的键表示关注的博主发布文章推送的键,冒号后面表示小明的账号ID,值为小明关注的两位博主新发布文章的id。
当小明查看订阅的文章时,会分页展示最新的文章,假设每页显示5条
127.0.0.1:6379> lrange likearticle:xiaomId 0 5
1) "072"
2) "051"