redis pipline
Posted migoo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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解决该性能问题
以上是关于redis pipline的主要内容,如果未能解决你的问题,请参考以下文章
Redis 基础 -- Redis简介CentOS 7 单机安装Redis启动Redis(后台启动Redis 指定配置文件启动Redis 开机自启Redis )Redis客户端(含图形化界面)