• 93674

    文章

  • 777

    评论

  • 17

    友链

  • 最近新加了换肤功能,大家多来逛逛吧~~~~
  • 喜欢这个网站的朋友可以加一下QQ群,我们一起交流技术。

Redis学习笔记——数据类型之列表类型

撸了今年阿里、腾讯和美团的面试,我有一个重要发现.......>>

介绍

  • 存储有序的字符串列表。
  • 常用的操作是向列表两端添加元素,获得列表的某一个片段。
  • 内部使用双向列表实现。所以向列表两端添加元素的时间复杂度为O(1),获取越接近两端的元素速度就越快。通过索引访问元素比较慢。
  • 一个列表类型键最多能容纳2^32-1个元素。
  • 列表的其实索引为 0。

应用场景

  • 社交网站的新鲜事
  • 记录日志
  • 队列

命令

  1. 向列表两端增加元素
LPUSH key value [value ···]
RPUSH key value [value ···]
  • LPUSH 命令用来向列表左边增加一个或者多个元素,返回值为列表增加元素之后的长度。
  • RPUSH 命令用来向列表右边增加一个或者多个元素,返回值为列表增加元素之后的长度。
redis> LPUSH numbers 2
(integer) 1
redis> LPUSH numbers 3 4
(integer) 3
  1. 从列表两端弹出元素
LPOP key
RPOP key
  • 有进有出,LPOP 命令可以从列表左边弹出一个元素。RPOP 命令可以从列表右边弹出一个元素。
  • 这两个命令执行两步操作:第一步是将列表左(右)边的元素从列表中移除,第二步是返回被移除的元素值。
redis> LPOP numbers
"3"

将上边提到的四个命令组合运用可以模拟栈和队列的操作。

  1. 获取列表中元素的个数
LLEN key
  • 当键不存在的时候返回 0。
  1. 获得列表片段
LRANGE key start stop
  • LRANGE 命令将返回索引从 start 到 stop 之间的所有元素(包含两端元素)。
  • LRANGE 命令指示读取数据不会对列表中的数据进行操作。
  • LRANGE 命令也支持负索引。
  • 如果 start 的索引位置比 stop 的索引位置靠后,则会返回空列表。
  • 如果 stop 大于实际的索引范围,则会返回到列表最右边的元素。
  1. 删除列表中指定的值
LREM key count value
  • LREM 命令会删除列表中前 count 个值为 value 的元素,返回值是实际删除的元素个数。根据 count 值的不同,LREM 命令的执行方式会略有差异:
  • 当 count > 0 时 LREM 命令会从列表左边开始删除前 count 个值为 value 的元素。
  • 当 count < 0 时 LREM 命令会从列表右边开始删除前 count 个值为 value 的元素。
  • 当 count = 0 时 LREM 命令会删除所有值为 value 的元素。
  1. 获得/设置指定索引的元素的值
LINDEX key index
LSET key index value
  • LINDEX 命令用来返回指定索引的元素,索引从 0 开始。
  • 如果 index 是负数则表示从右边开始计算的索引,最右边元素的索引是 -1。
  • LSET 会将索引为 index 的元素赋值为 value。
  1. 只保留列表指定片段
LTRIM key start end
  • LTRIM 命令可以删除指定索引范围之外的所有元素。
  • LTRIM 命令指定范围包含两侧元素。
  1. 向列表中插入元素
LINSERT key BEFORE|AFTER pivot value
  • LINSERT 命令首先会在列表中从左到右查找值为 pivot 的元素,然后根据第二个参数是 BEFORE 还是 AFTER 来决定将 value 插入到该元素的前面还是后面。
  1. 将元素从一个列表转移到另一个列表
RPOPLPUSH source destination

执行过程

  1. 执行 RPOP 命令
  2. 执行 LPUSH 命令。
  1. RPOPLPUSH 命令会先从 source 列表类型建的右边弹出一个元素,然后将其加入到 destination 列表类型键的左边,并返回这个元素的值
  2. RPOPLPUSH 命令的操作时原子的

当把列表类型作为队列使用时,RPOPLPUSH命令可以很直观地在多个队列中传递数据。当source和destination相同时,RPOPLPUSH命令会不断地将队尾的元素移到队首,借助这个特性我们可以实现一个网站监控系统:使用一个队列存储需要监控的网址,然后监控程序不断地使用RPOPLPUSH命令循环取出一个网址来测试可用性。这里使用RPOPLPUSH命令的好处在于在程序执行过程中仍然可以不断地向网址列表中加入新网址,而且整个系统容易扩展,允许多个客户端同时处理队列。


695856371Web网页设计师②群 | 喜欢本站的朋友可以收藏本站,或者加入我们大家一起来交流技术!

欢迎来到梁钟霖个人博客网站。本个人博客网站提供最新的站长新闻,各种互联网资讯。 还提供个人博客模板,最新最全的java教程,java面试题。在此我将尽我最大所能将此个人博客网站做的最好! 谢谢大家,愿大家一起进步!

转载原创文章请注明出处,转载至: 梁钟霖个人博客www.liangzl.com

0条评论

Loading...


发表评论

电子邮件地址不会被公开。 必填项已用*标注

自定义皮肤
注册梁钟霖个人博客