Redis管道(Pipeline)

Pipeline是为了解决RTT,仅仅是将命令打包一次性发送,对整个Redis的执行不造成其它任何影响。是批处理命令变种优化措施,类似Redis的原生批命令(如mset和mget)。


问题由来

Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。一个请求会遵循以下步骤:

  • 客户端向服务端发送命令分四步(发送命令→命令排队→命令执行→返回结果),并监听Socket返回,通常以阻塞模式等待服务端响应。
  • 服务端处理命令,并将结果返回给客户端。

上述两步称为:Round Trip Time(简称RTT,数据包往返于两端的时间)。如果同时需要执行大量的命令,那么就要等待上一条命令应答后再执行,这中间不仅仅多了RTT(Round Time Trip),而且还频繁调用系统IO,发送网络请求,同时需要redis调用多次read()和write()系统方法,系统方法会将数据从用户态转移到内核态,这样就会对进程上下文产生比较大的影响,性能不好。


示例

注:pipeline不保证原子性,如果执行过程中指令发生异常,将会继续执行后续的指令


与原生批量命令对比

  • 原生批量命令是原子性的,pipeline是非原子性
  • 原生批量命令一次只能执行一种命令,pipeline支持批量执行不同命令
  • 原生批量命令是服务端实现,pipeline需要服务端与客户端共同完成

与事务对比

  • pipeline一次性将多条命令发送到服务器,事务是逐条发送,并在接收到exec命令后才会执行
  • pipeline执行时不会阻塞其它命令,事务执行时会阻塞
相关推荐
天天喝旺仔26 分钟前
深入理解 JWT:从 Token 结构、签名机制到前后端鉴权实战
redis·安全·spring·微服务·https
一只小李郁vickie40 分钟前
Redis 集群部署手册(3主3从)
运维·redis
Gl�ria12 小时前
Redis 高可用架构对比
数据库·redis
Zenova EdgeOS15 小时前
Python 工业边缘 redis-py 异步实战
开发语言·redis·python
hanchenxing15 小时前
前端异步任务三方案:Celery vs Redis Stream vs BullMQ 实战对比消息队列
前端·数据库·redis·异步任务·方案对比
刃神太酷啦1 天前
Redis 核心进阶:哨兵、集群、缓存问题与分布式锁详解----《Hello Redis!》(6)
linux·c语言·数据库·c++·redis·分布式·缓存
suweijie7681 天前
Redis 7.0.2 Docker Compose 部署
redis·docker
爱和冰阔落1 天前
【Linux】手写日志与固定线程池:任务队列、工作线程和安全退出
linux·运维·c++·redis·安卓
像风一样自由20201 天前
29.Redis在大模型应用中有哪些用途缓存会话与限流
数据库·人工智能·redis·缓存·大模型·milvus·智能体
weixin_460443561 天前
考试监控大屏为什么不能直接查数据库?WebSocket、Redis与实时数据聚合架构设计
数据库·redis·在线考试系统·培训考试系统·煤矿培训考试系统·煤矿在线考试系统·宏远培训考试系统