美文网首页
redis之pipeline的分析与使用

redis之pipeline的分析与使用

作者: 薛云龙 | 来源:发表于2019-01-09 16:36 被阅读12次

字如其名,pipeline就是管道的意思。管道本身是能够承载流式数据的一个长链路,所以通过管道的字面意思我们能够知道他能够进行事件的缓冲的。

redis客户端与服务器端的交互

Redis其实是一个基于TCP协议的CS架构的内存数据库。所有的操作都是一个request一个response的同步操作。redis每接收到一个命令就会处理一个命令,并同步返回结果。这样带来的问题就是,一个命令就会产生一次RTT(Round Time Trip),这样的话必然会消耗大量的网络IO。

pipeline的出现

为了提高redis的读写能力,所以就有了pipeline的出现,我们对于多个命令执行,不再同步等待每个命令的返回结果。我们会在统一一个时间点来获取response。这样就解决多个RTT的问题
普通请求模型:

image.png
Pipeline请求模型:
image.png
注:图片来源,侵删

当然,通过pipeline我们也不仅仅只是通过减少RTT来提高服务的响应能力,对于redis来说,处理单次redis command所带来的访问数据结果操作和响应客户端操作是没有多少耗费的,但是处理多次redis command除了带来了频繁的网络io,同样需要redis调用多次read() 和write()系统方法,系统方法会将数据从用户态转移到内核态,这样就会对进程上下文有比较大的影响了。
通过pipeline我们将会大大减少这样的操作。
参考文章

pipeline注意点

  • pipeline只适用于那些不需要获取同步结果的场景,比如hincr,hset等更新操作。而对于读取hget操作则不能适用。
  • pipeline组装命令也不能是没有节制的,如果pipeline组装命令数据过多,则会导致一次pipeline同步等待时间过长,影响客户端体验甚至导致网络阻塞。
  • pipeline不能保证命令执行的原子性。如多个命令在执行的中间发生了异常,那么将会丢失未执行的命令。所以我们一般使用pipeline时,需要自己保证执行命令的数据安全性。

相关文章

  • redis之pipeline的分析与使用

    字如其名,pipeline就是管道的意思。管道本身是能够承载流式数据的一个长链路,所以通过管道的字面意思我们能够知...

  • springboot使用redis pipeline

    springboot redis之使用pipeline redis是基于客户端-服务器以及请求-响应协议的TCP服...

  • redis内容扩展:一文看懂

    redis内容扩展 Pipeline 注意:使用Pipeline的操作是非原子操作 GEO GEOADD loca...

  • Redis数据结构扩展详解

    redis内容扩展1.Pipeline注意:使用Pipeline的操作是非原子操作 2.GEOGEOADD loc...

  • Redis-主从用服务冗余避免单点

    在说到Redis主从同步之前先说说同步过程中会用到的Pipeline Redis客户端与Redis服务器之间使用T...

  • Redis 如何高效安全删除大 Hash Key

    使用 SCAN 和 Pipeline 命令删除 Redis 的大 Key 删除操作会导致 Redis 线程阻塞,网...

  • Redis之慢查询分析

    Redis除了提供5种数据结构之外,还为我们提供了诸如慢查询分析,Redis Shell, Pipeline,事物...

  • redis pipeline简介

    java中redis的pipeline pipeline方式执行redis操作: doInRedis方法中实现需要...

  • redis批量操作

    redis multi pipeline平时使用redis的时候,经常有批量操作的需求;比如批量读取一批数据,或者...

  • Redis之Pipeline

    Pipeline: 管道,流水线 一条命令的生命周期有4个阶段: 发送命令->命令排队->命令执行->返回结果,其...

网友评论

      本文标题:redis之pipeline的分析与使用

      本文链接:https://www.haomeiwen.com/subject/rlibrqtx.html