Redis学习笔记--管道
管道
什么是管道:
管道是一种可以将多个或多种数据类型的命令一次性发送给redis服务器,然后一次性获取所有命令的执行结果。从而减少客户端和服务器之间的网络往返次数(RTT),提高处理性能。说白了就是支持多种数据类型命令的批处理。ES中也有类似的功能。
能解决什么问题:
在普通的Redis交互中,每个命令都要经历发送请求、等待服务器处理、接收处理结果三个步骤,当大数据量的情况下(例如:set k1 v1 到 set v100000 v100000就需要1000000次网络请求),这样频繁的网络请求,带来大量的资源消耗引发性能瓶颈,Redis管道就是通过批量发送命令,减少网络延迟带来的影响,从而提高系统的整体吞吐量,提升系统的性能。
实现原理:
Redis是基于客户端-服务端模型的,客户端和服务端通过TCP连接进行通信,在传统模式下,每个命令都要经历发送请求、等待服务器处理、接受处理结果三个步骤,而且需要等待上一个命令执行完成后才能执行下一个命令。而管道则是通过将客户端的多个命令缓存起来,一次性打包好通过TCP连接发送给Redis服务器,服务器接收到这些命令后,依次执行,并将执行结果返回给客户端,客户端再对返回结果进行解析和处理。
优缺点:
优点:
1、减少网络开销:可以一次执行多个或多种命令,减少客户端和服务端之间的网络往返次数,从而提升性能。
2、支持任意命令格式的组合:可以在单次管道执行中执行多个多种类型的命令
缺点:
1、原子性问题:管道中的命令执行时不能保证原子性。
2、错误处理复杂:当部分命令执行失败时,需要手动介入处理错误信息。
3、控制命令大小:超大的管道可能引发服务器的压力,应控制好单次管道的大小,例如单次管道执行100-1000个命令
与事务的对比:
1、原子性:管道无法保证原子性,事务可以保证原子性(要么都成功,要么都失败)
2、执行时机:管道可以立即执行,事务需要放到命令队列中统一执行
3、错误处理:管道中部分命令执行失败不影响后续命令的执行,事务如果是语法错误会立即回滚,如果是运行时错误会继续执行
4、Watch监控机制:管道不支持Watch监控机制,事务支持
与原生批处理命令的对比:
1、命令类型:管道支持多种类型的命令同时执行,原生批处理只支持单类型的命令,例如:mset、mget
2、原子性:管道无法保证原子性,原生批处理命令可以保证命令级的原子性,例如:getset
3、返回结果:管道会返回所有命令的返回式,原生批处理命令只返回聚合结果
4、使用灵活性:管道的使用灵活性较高,原生批处理命令的使用灵活性较低
适用场景:
1、批量数据的同步
2、大数据量下的数据分析和统计

浙公网安备 33010602011771号