可能有些小伙伴使用redis读写数据在需要循环使用的场景会发现效率并不是很高

于是我分享一个pipeline管道方法

我们这里用12万条数据做测试,首先来试试写入操作,看看用常规方法以列表形式写入:

 

 

 

 

 

可以看到耗时大约9.2秒

我们再来看看使用pipeline方法进行列表存储,同样是12万条数据:

 

 

 

 

 

 可以看到,写入12万条数据此时只需要3.6秒

执行时间缩短了大约60%!

 

我们再来试试读取操作,同样是12万条数据,常规方法进行读取:

 

 

 

 

 

 可以看到耗时大约是6.6秒

此时我们继续使用管道方法进行读取:

 

 

 

 

 可以看到读取12万条数据耗时大约是2.3秒

执行时间缩短了大约65%!

 

为什么时间会差这么多呢,因为在for循环里直接使用redis操作,会向redis数据库来回发送多次请求,而pipeline是Redis提供的一种批处理机制,通过将多次请求合并成一次执行,可以有效减少网络请求次数,减少多次IO带来的消耗,速度自然会提升不少

不过需要注意的是:pipeline 期间将 “独占” 链接,此时将不能进行非 “管道” 类型的其他操作,直到 pipeline 关闭。且pipeline数据如果太过庞大,可能会造成内存溢出从而报错:

 

 此时我们就需要对数据进行分割操作或者在php.ini中给php分配更多的内存

 

 

 

 

 

 

posted on 2022-08-02 14:06  杏寿郎  阅读(426)  评论(0编辑  收藏  举报