论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
数据库
›
Nosql
›
Redis管道
Redis管道
王國慶
金牌会员
|
2024-2-7 04:47:59
|
显示全部楼层
|
阅读模式
楼主
主题
916
|
帖子
916
|
积分
2752
背景
Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。一个请求会遵循以下步骤:
1 客户端向服务端发送命令分四步(发送命令→命令排队→命令执行→返回结果),并监听Socket返回,通常以阻塞模式等待服务端响应。
2 服务端处理命令,并将结果返回给客户端。
上述两步称为:Round Trip Time(简称RTT,数据包往返于两端的时间),问题笔记最下方
如果同时需要执行大量的命令,那么就要等待上一条命令应答后再执行,这中间不仅仅多了RTT(Round Time Trip),而且还频繁调用系统IO,发送网络请求,同时需要redis调用多次read()和write()系统方法,系统方法会将数据从用户态转移到内核态,这样就会对进程上下文有比较大的影响了,性能不太好,o(╥﹏╥)o
如何优化频繁命令往返造成的性能瓶颈——管道
Pipeline是为了解决RTT往返时,仅仅是将命令打包一次性发送,对整个Redis的执行不造成其它任何影响。是批处理命令变种优化措施类似于Redis的原生批命令(mget和mset)
案例
小结
Pipeline与原生批量命令对比:
原生批量命令是原子性(如mset,mget),Pipeline是非原子性。
原生批量命令一次只能执行一种命令,Pipeline支持批量执行不同的命令。
原生批量命令是服务端实现,而Pipeline需要服务端与客户端共同完成。
Pipeline与事物对比:
事务具有原子性,管道不具有原子性。
管道一次性将多条命令发送到服务器,事务是一条一条的发,事务只有在接收到exec命令后才会执行,管道不会。
执行事务时会阻塞其他命令的执行,而执行管道中的命令时不会。
使用PIpeline注意事项:
PIpeline缓冲的指令只是会依次执行,不保证原子性,如果执行中指令发生异常,将会继续执行后续的指令。
使用PIpeline组装的命令个数不能太多,不然数据量过大客户端阻塞的时间可能过久,同时服务端此时也被迫恢复一个队列的答复,占用很多内存。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
王國慶
金牌会员
这个人很懒什么都没写!
楼主热帖
webman
Jupyter Notebook,太强大了
【Shashlik.EventBus】.NET 事件总线, ...
React技巧之发出http请求
【网络】https单向认证和双向认证 ...
场景化数据应用,企业业务创新的内在驱 ...
导入例子体验鸿蒙开发工具的hello worl ...
【云原生架构】阿里云 —— 主要架构模 ...
一文搞懂this指向
2022-08-16 数据库查询语言之-------D ...
标签云
挺好的
服务器
快速回复
返回顶部
返回列表