美文网首页
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的分析与使用

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