For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
Redis数据库在许多软件编程开发项目中都得到了广泛的应用,而本文我们就通过案例分析来简单了解一下,Redis数据库管道概念与应用分析。
1.管道概述:
1.1管道出现的背景:
Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。一个请求会遵循以下步骤:
1)客户端向服务端发送命令分四步(发送命令→命令排队→命令执行→返回结果),并监听Socket返回,通常以阻塞模式等待服务端响应。
2)服务端处理命令,并将结果返回给客户端。
上述两步称为:RoundTripTime(简称RTT,数据包往返于两端的时间)
如果同时需要执行大量的命令,那么就要等待上一条命令应答后再执行,这中间不仅仅多了RTT(RoundTimeTrip),而且还频繁调用系统IO,发送网络请求,同时需要redis调用多次read()和write()系统方法,系统方法会将数据从用户态转移到内核态,这样就会对进程上下文有比较大的影响了,性能不太好,o(╥﹏╥)o
1.2管道的定义:
管道是为了解决命令往返过于频繁而导致的RTT时长过长,仅仅是将命令打包一次性发送,对整个redis的执行不造成其他任何影响。
它属于批处理命令变种优化措施,类似redis的原生批处理命令(mset和mget),但是这种批处理命令(例如mset)只能对string类型的数据批处理,
如果需要对多种类型数据批处理,就必须使用管道了
所以,管道的出现能对频繁的命令往返进行优化,从而提升redis的性能。
2.管道实操:
2.1先清空数据库(方便直观地显示操作结果):
2.2使用管道进行批处理:
这时候再去查询数据库会发现,这些命令都被成功且正确的执行了
2.3管道与原生批命令对比:
2.4管道与事务对比:
2.5注意:
管道缓冲的指令只是会依次执行,不保证原子性,如果执行过程中指令发生异常,将会继续执行后续的指令。
使用管道组装的命令个数也不能太多,不然数据量过大,客户端阻塞的时间可能过久,同时服务端此时也被迫回复一个队列答复,占用很多内存。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!请读者仅作参考。更多内容请加抖音太原达内IT培训学习了解。