zoukankan      html  css  js  c++  java
  • 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解决该性能问题

  • 相关阅读:
    Busybox制作ARM(iTOP4412) 根文件系统
    01.高并发底层原理
    设计模式
    高并发实战
    # 记一次shell编写
    shell if条件语句
    scrapy使用
    整理JAVA知识点--基础篇,能力有限不足地方请大神们帮忙完善下
    mybatis-generator使用
    优先级队列实现
  • 原文地址:https://www.cnblogs.com/migoo/p/10055428.html
Copyright © 2011-2022 走看看