• redis pipline


    使用背景

    项目中需要使用单redis实例存储千万级别的数据,当时认为开多线程存储能够提高执行速度,开了10个线程不停的存储每一条数据。结果运行速度龟速,加大线程数还是无果。

    redis 单线程

    官方FAQ表示,因为Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用单线程的方案了(毕竟采用多线程会有很多麻烦!)。
    看到这里应该就能够理解为什么不断增加处理线程数,也不能加快运行速度了。

    • redis本身就是单线程,client再多,最终也只能单线程执行
    • redis主要瓶颈在于IO操作

    解决方案

    • 单线程的方式是无法发挥多核CPU性能,可以通过在单机开多个Redis实例来完善
    • 使用 pipline

    重点说一下pipline
    pipline的原理也比较简单,就是将一大堆的命令打包成一个原子操作,一次性传递给redis让其顺序执行,只会存在命令全部成功,或者全部失败。

    为什么pipline会比拆成每一条小命令执行要快呢?

    原因就是IO操作,每一条小命令执行时client与redis都要进行网络连接,传输命令,等待执行,传输结果,释放连接这样的过程.redis执行速度是很快的,大部份时间都耗在网络上了。

    而pipline是一次性传输一个命令集,减少了大量的网络操作。

    最终项目使用pipline解决该性能问题

  • 相关阅读:
    ARKit 初体验
    基于树莓派的微型气象站设计与开发(Windows 10 IoT Core)
    UWP开发-重新理解MVVM
    UWP开发-二维变换以及三维变换
    WebRTC for UWP
    swift4.0 Http 请求
    Swift4 Json
    UNITY VR 视频/图片 开发心得(二)
    UNITY VR 视频/图片 开发心得(一)
    UWP开发中的方向传感器
  • 原文地址:https://www.cnblogs.com/migoo/p/10055428.html
Copyright © 2020-2023  润新知