一般情况下,从 list 中获取数据可以是 lpop 或者 rpop,每执行一次,如果有数据就返回数据,如果没有就返回空。

在此基础上又有两个优化后的命令 blpop 和 brpop,也是每次只取一条记录,但碰到 list 为空时,就陷入阻塞状态,直到有数据为止。

以上四个命令都是单条记录获取,事实上 redis 还提供了 lrange 和 ltrim 两个命令,可搭配使用使得批量获取 list 中数据。

lrange 返回 list 中指定区间内的元素,区间范围通过偏移量 start 和 end 确定。如往队列 chars 塞入26个英文字母:

127.0.0.1:6379> rpush chars a b c d e f g h i j k l m n o p q r s t u v w x y z
(integer) 26
127.0.0.1:6379> llen chars
(integer) 26

如果查看队列 chars 中前 10 条数据:

127.0.0.1:6379> lrange chars 0 91) "a"2) "b"3) "c"4) "d"5) "e"6) "f"7) "g"8) "h"9) "i"
10) "j"
127.0.0.1:6379> llen chars
(integer) 26

注意,此时虽然能获取到 list 中数据,但是数据并没有从 list 中删除,从执行 llen 命令显示还有 26 条记录也能看出来。这时候就要派上 ltrim 命令了。

ltrim 命令是对一个 list 进行裁剪,只获取指定区间内的元素,区间范围也由偏移量 start 和 end 确定。如果 end 值为 -1,则保留到最后一个元素。

由于已经拿到 list 中前 10 条数据,现在只需要保留从第 11 个元素开始及后面的所有数据。

127.0.0.1:6379> ltrim chars 10 -1
OK
127.0.0.1:6379> llen chars
(integer) 16
127.0.0.1:6379> lrange chars 0 -11) "k"2) "l"3) "m"4) "n"5) "o"6) "p"7) "q"8) "r"9) "s"
10) "t"
11) "u"
12) "v"
13) "w"
14) "x"
15) "y"
16) "z"

在执行 ltrim 命令后可以看到队列 chars 中只剩下 16 条数据,并且删除的数据恰好就是前面通过 lrange 获取的 10 条数据。

至此就实现了批量获取 redis 队列中数据,相对逐条获取 rpop 和 brpop,效率要高得多。

redis队列批量获取相关推荐

  1. redis 队列内容批量获取

    redis队列的批量获取一直以来让我很困惑,今天又遇到了同样的问题,经过几番波折,终于找到了一个方法.分享一下 只需要redis自带的两个方法(lrange, ltrim) lrange可以获取队列中 ...

  2. redis 使用redisTemplate使用PipeLine方式 利用lRange 批量获取队列内容并移除当前获取的消息

    Redis基础配置 配置解析方式,泛型类自动转换更加方便 private RedisTemplate redisTemplate;private RedisSerializer<String&g ...

  3. 高并发简单解决方案————redis队列缓存+mysql 批量入库(ThinkPhP)

    源码地址:https://github.com/Tinywan/PHP_Experience 问题分析 问题一:要求日志最好入库:但是,直接入库mysql确实扛不住,批量入库没有问题,done.[批量 ...

  4. redis队列缓存 + mysql 批量入库 + php离线整合

    需求背景:有个调用统计日志存储和统计需求,要求存储到mysql中:存储数据高峰能达到日均千万,瓶颈在于直接入库并发太高,可能会把mysql干垮. 问题分析 思考:应用网站架构的衍化过程中,应用最新的框 ...

  5. python redis连接池获取后关闭_python通过连接池连接redis,操作redis队列

    在每次使用redis都进行连接的话会拉低redis的效率,都知道redis是基于内存的数据库,效率贼高,所以每次进行连接比真正使用消耗的资源和时间还多.所以为了节省资源,减少多次连接损耗,连接池的作用 ...

  6. 关于Redis集群模式下,使用mget通过keys批量获取value时的解决方案

    关于Redis集群模式下,使用mget通过keys批量获取value时的解决方案 今天在做项目的时候,需要使用到mget命令,通过一个批量的key去获取对应的value集合,但是取值的时候,报了这个错 ...

  7. Laravel/Lumen 使用 Redis队列

    一.概述 在Web开发中,我们经常会遇到需要批量处理任务的场景,比如群发邮件.秒杀资格获取等,我们将这些耗时或者高并发的操作放到队列中异步执行可以有效缓解系统压力.提高系统响应速度和负载能力. 二.配 ...

  8. 记录一次rediscluster 调用lua 脚本, 用于 list 批量获取

    记录一次rediscluster 调用lua 脚本 用于 list 批量获取 需求:用redis list 当作消息队列(原来的流程固定不能变更),需要增加消费速度 改进方案的思想(不考虑业务逻辑变更 ...

  9. tensorflow 对csv数据进行批量获取

    代码如下: #读取文件数据 def read_data(file_queue):     # 读取的时候需要跳过第一行     reader = tf.TextLineReader(skip_head ...

最新文章

  1. 在JavaScript中使用“原型”还是“ this”?
  2. Laravel大型项目系列教程(三)之发表文章
  3. linux —— 学习笔记(用户管理与权限控制)
  4. platform Builder导出SDK
  5. ROS笔记(39) 串口配置
  6. Character Studio
  7. MATLAB图形插入标题
  8. 【安装库】matlab2020b安装及百度网盘提速
  9. 矩阵理论(一)基本概念的个人理解
  10. 责任链模式实现及在Filter中的应用
  11. 使用ffmpeg破解m3u8加密视频文件
  12. 关于Employee 类的使用
  13. nodejs 中读取 package.json 文件内容
  14. C#反编译之:<PrivateImplementationDetails>.ComputeStringHash 错误
  15. windows修改IP命令/脚本
  16. gif录制软件:ScreenToGif
  17. 51nod-【1278 相离的圆】
  18. 南卫理公会大学计算机科学,南卫理公会大学计算机科学专业.pdf
  19. 设计模式中的工厂类图
  20. java程序设计案例_Java程序设计案例教程

热门文章

  1. 傻妞机器人安装完整教程【最新版】- 11月24日更新
  2. [Mdfs] lc77. 组合(组合类型枚举+题目总结+经典)
  3. 公众号如何关注回复多图文?
  4. [Tex学习]给汉字注音
  5. 苹果原壁纸高清_机车 | 宝马 川崎摩托车高清壁纸
  6. nginx负载均衡搭建
  7. (00XX系列)摸摸Windows的SEH
  8. 货代英语--------澳大利亚包装声明
  9. windows server 2012/2016如何禁止某个ip或者ip地址段访问
  10. Word文档为某段落/某些文字添加底色