redis list数据结构操作学习
转自:https://zhuanlan.zhihu.com/p/76578547
1.插入元素
> rpush mylist A # 从右侧插入 (integer) 1 > rpush mylist B (integer) 2 > lpush mylist first (integer) 3 > lrange mylist 0 -1 // 这里使用 0 -1 表示显示所有元素,注意是:0 空格 -1,0 代表第一个元素,-1 代表最后一个元素 1) "first" 2) "A" 3) "B" > rpush mylist 1 2 3 4 5 "foo bar" # 插入多个 (integer) 9 > lrange mylist 0 -1 // 从左到右查看元素 1) "first" 2) "A" 3) "B" 4) "1" 5) "2" 6) "3" 7) "4" 8) "5" 9) "foo bar"
2.pop元素
> rpush mylist a b c (integer) 3 > rpop mylist #从右到左依次pop元素 "c" > rpop mylist "b" > rpop mylist "a" > rpop mylist #空list (nil)
3.设置上限
> rpush mylist 1 2 3 4 5 (integer) 5 > ltrim mylist 0 2 # 只从索引 0 到 2 中获取 List 元素,其他所有内容都将被丢弃 OK > lrange mylist 0 -1 1) "1" 2) "2" 3) "3"
4.删除指定元素
>LREM key count VALUE #命令返回值:被移除元素的数量。 列表key不存在时返回 0
- count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。
- count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。
- count = 0 : 移除表中所有与 VALUE 相等的值。
时间复杂度: O(N+M),其中N是列表的长度,M是移除的元素的数量。(不太理解这个复杂度怎么算的。)
4.应用场景
记住用户发布到社交网络的最新更新。请假设您的主页显示在照片是共享社交网络中发布的最新照片,并且您希望加快访问速度。
- 每次用户发布新照片时,我们都会将其 ID 添加到带有 LPUSH 的 List 中。
- 当用户访问主页时,我们使用LRANGE 0 9 来获取最新的 10 张照片。
lpop弹出所有元素后,键值 key 不再存在。