Redis的学习之管道
2015-04-03 12:47
197 查看
Redis的工作模式:请求响应式
Redis是一个使用客户端/服务器模型(也被称作请求/响应协议)的TCP服务器。
这说明通常来讲一个一个请求的实现有以下步骤:
1.客户端发送请求到服务器,并从socket中以堵塞的方式读取服务器的响应数据。
2.服务器对发动的命令进行处理并把响应数据发回客户端。
环路时间RTT:
从客户端请求数据开始到收到服务器的响应数据截止的时间。
管道解决的问题描述:
当客户端需要一次发送很多请求时(比如一次向一个List添加很多元素,或者向一个数据库添加很多Key),这个环路时间会对性能造成非常大的影响。如果环路时间是250毫秒(在网络连接非常慢的情况下),即使服务端能每秒处理10万个请求,我们一秒最大也只能处理四个请求。
即使我们用的是本地回环接口,本地环路时间会短得多(比如在我本机上用ping测试是0.044毫秒),但是如果你要一次进行大量写操作,这个时间依然不少。
Redis的管道:
一个请求/响应服务器能够做到在客户端还没有读取上个返回值的时候就处理新的请求。通过这种方式客户端就可以在不获取每次请求的响应的情况下给服务端一次发送多个命令,并在未来的某个时间一次获得这些所有的响应。这样我们不再每次调用都产生RTT的花销,所有命令加起来只产生一次RTT花销。
使用管道要注意:
当客户端一下子发送多条请求命令时,服务器会将这些所有命令的请求放入队列,这样会带来额外的内存开销。为了减少内存开销,我们最好规定一个命令数的上限,比如10000条,这样内存开销的上限就是这10000条命令的响应值。
Redis是一个使用客户端/服务器模型(也被称作请求/响应协议)的TCP服务器。
这说明通常来讲一个一个请求的实现有以下步骤:
1.客户端发送请求到服务器,并从socket中以堵塞的方式读取服务器的响应数据。
2.服务器对发动的命令进行处理并把响应数据发回客户端。
环路时间RTT:
从客户端请求数据开始到收到服务器的响应数据截止的时间。
管道解决的问题描述:
当客户端需要一次发送很多请求时(比如一次向一个List添加很多元素,或者向一个数据库添加很多Key),这个环路时间会对性能造成非常大的影响。如果环路时间是250毫秒(在网络连接非常慢的情况下),即使服务端能每秒处理10万个请求,我们一秒最大也只能处理四个请求。
即使我们用的是本地回环接口,本地环路时间会短得多(比如在我本机上用ping测试是0.044毫秒),但是如果你要一次进行大量写操作,这个时间依然不少。
Redis的管道:
一个请求/响应服务器能够做到在客户端还没有读取上个返回值的时候就处理新的请求。通过这种方式客户端就可以在不获取每次请求的响应的情况下给服务端一次发送多个命令,并在未来的某个时间一次获得这些所有的响应。这样我们不再每次调用都产生RTT的花销,所有命令加起来只产生一次RTT花销。
使用管道要注意:
当客户端一下子发送多条请求命令时,服务器会将这些所有命令的请求放入队列,这样会带来额外的内存开销。为了减少内存开销,我们最好规定一个命令数的上限,比如10000条,这样内存开销的上限就是这10000条命令的响应值。
相关文章推荐
- Redis基础学习--Redis 事务(watch命令)、生存时间、排序、消息通知("发布/订阅"模式)、管道、节省空间
- Redis学习笔记之九:管道
- Redis学习笔记7--Redis管道(pipeline)
- Redis学习笔记7--Redis管道(pipeline)
- Redis基础学习----管道命令和xargs的区别及redis批量删除命令
- Redis学习笔记7--Redis管道(pipeline)
- 通过MSDN上的例子学习管道读写技术
- linux c语言学习笔记之IPC-管道
- Redis中的动态字符串学习教程
- Linux进程线程学习笔记:进程间通信 之 管道
- 嵌入式linux的学习笔记-pipe管道(二)
- 短期快速学习LINUX,涉及vi用法,管道,标准输入、输出和错误,grep 用法
- 管道学习手记
- IPC学习笔记之 管道和FIFO
- UNIX环境高级编程学习之第十五章进程间通信 - 通过匿名管道实现父子进程同步
- 【9月19日】学习管道
- 学习VC++深入浅出——命名管道的使用
- [学习]“sql2005管道的另一端上无任何进程”及附带一系列问题完整解决方法
- linux 管道学习
- IPC学习笔记(2) 管道和FIFO