Redis Pipelining
Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。这意味着通常情况下一个请求会遵循以下步骤:
客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应。
服务端处理命令,并将结果返回给客户端。
Redis 官方文档:https://redis.io/topics/pipelining
提高性能
Redis 管道技术可以在服务端未响应时,客户端可以继续向服务端发送请求,并最终一次性读取所有服务端的响应。
管道技术最显著的优势是提高了 redis 服务的性能。
Redis 事务
简介
Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证:
- 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
- 事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。
一个事务从开始到执行会经历以下三个阶段:
- 开始事务。
- 命令入队。
- 执行事务。
命令行
在不使用 Pipelining 时,执行多条命令是一条一条依次执行的
redis 127.0.0.1:6379> INCR X
(integer) 1
redis 127.0.0.1:6379> INCR X
(integer) 2
redis 127.0.0.1:6379> INCR X
(integer) 3
redis 127.0.0.1:6379> INCR X
(integer) 4
使用 Pipelining 后,可以一次执行多条命令
redis 127.0.0.1:6379> MULTI
OK
redis 127.0.0.1:6379> INCR X
QUEUED
redis 127.0.0.1:6379> INCR X
QUEUED
redis 127.0.0.1:6379> INCR X
QUEUED
redis 127.0.0.1:6379> INCR X
QUEUED
redis 127.0.0.1:6379> EXEC
1) (integer) 1
2) (integer) 2
3) (integer) 3
4) (integer) 4
通过 Python
一个程序取数据,一个程序放数据,放入数据和修改数据之间间隔 3s
示例:
import time
import redis
pool = redis.ConnectionPool(host='localhost', port=6379)
r = redis.Redis(connection_pool=pool)
pipe = r.pipeline(transaction=True)
pipe.multi()
pipe.set('num', '1')
time.sleep(3)
pipe.set('num', '2')
pipe.execute()
先启动,用来监听数据:
import redis
import time
pool = redis.ConnectionPool(host='localhost', port=6379)
r = redis.Redis(connection_pool=pool)
num = None
r.delete('num') # 删除之前的数据
while not num or num == '1':
num = r.get('num')
time.sleep(1)
if num:
print(num.decode())
else:
print('no data')
通过运行结果看到并没有获得第一次的数据,而是直接获得修改后的数据
命令
DISCARD
: 取消事务,放弃执行事务块内的所有命令
EXEC
: 执行所有事务块内的命令
MULTI
: 标记一个事务块的开始
UNWATCH
: 取消 WATCH 命令对所有 key 的监视
WATCH
: 监视一个或多个 key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断
Redis Pipelining的更多相关文章
- Redis - pipelining(管道)
客户端向服务器发送一个查询请求,并监听 socket 返回,等待服务器响应.通常是阻塞模式,在收到服务器响应之前是挂起的,不能继续发送请求. 可以使用管道来改善这种情况.在使用管道的情况下,客户端可以 ...
- <Redis Advance><Pipelining><Memory Optimization><Expire><Transactions>
Overview About Redis pipelining About Redis memory optimization About Redis expire About Redis trans ...
- Redis 请求应答模式和往返延时 Pipelining
Redis是一个CS结构的TCP服务器,使用”请求-应答”的模式.,客户端发起一个请求是这样的步骤: 客户端发送一个请求给服务器,然后等待服务器的响应,一般客户端使用阻塞模式来等待服务器响应. 服务器 ...
- Redis(六)管道(Pipelining)
管道技术并不是Redis特有的,管道技术在计算机科学中有很多地方的应用. 来自wiki的解释: In computing, a pipeline, also known as a data pipel ...
- twemproxy explore,redis和memcache代理服务器
twemproxy,也叫nutcraker.是一个twtter开源的一个redis和memcache代理服务器. redis作为一个高效的缓存服务器,非常具有应用价值.但是当使用比较多的时候,就希望可 ...
- 转载----How fast is Redis?
How fast is Redis? Redis includes the redis-benchmark utility that simulates running commands done b ...
- Redis资料汇总专题
1.Redis是什么? 十五分钟介绍 Redis数据结构 Redis系统性介绍 一个很棒的Redis介绍PPT 强烈推荐!非同一般的Redis介绍 Redis之七种武器 锋利的Redis redis ...
- redis资料汇总
redis资源比较零散,引用nosqlfan上的文章,方便大家需要时翻阅.大家看完所有的,如果整理出文章的,麻烦知会一下,方便学习. 1.Redis是什么? 十五分钟介绍 Redis数据结构 Redi ...
- Redis 代理服务Twemproxy
1.twemproxy explore 当我们有大量 Redis 或 Memcached 的时候,通常只能通过客户端的一些数据分配算法(比如一致性哈希),来实现集群存储的特性.虽然Redis 2.6版 ...
随机推荐
- ESA2GJK1DH1K升级篇: STM32远程乒乓升级,基于Wi-Fi模块AT指令TCP透传方式,MQTT通信控制升级(含有数据校验)-APP用户程序制作过程
前言 这一节和上一节是搭配的 给大家鱼,也必须给鱼竿! 我期望自己封装的代码,无论过了多少年都有应用的价值! 这节说明一下制作APP用户程序的过程 咱是用MQTT通信控制模块实现升级,所以首先自己的程 ...
- AJAX 实现form表单提交
1.使用Ajax实现异步操作,点击登录按钮后,即触发form表单的提交事件,数据传输至后端 JSP: <script type="text/javascript" src=& ...
- 解决SQL Server中无管理员账户权限问题
遇到忘记SQL Server管理员账户密码或管理员账户被意外删除的情况,如何在SQL Server中添加一个新的管理员账户?按一下步骤操作可添加一个windows账户到SQL Server中,并分配数 ...
- Codeforces Round #598 (Div. 3) E. Yet Another Division Into Teams dp
E. Yet Another Division Into Teams There are n students at your university. The programming skill of ...
- TensorFlow2.0教程-使用keras训练模型
1.一般的模型构造.训练.测试流程 # 模型构造 inputs = keras.Input(shape=(784,), name='mnist_input') h1 = layers.Dense(64 ...
- Fuzzy finder(fzf+vim) 使用入门指南
今天无意中尝试了fzf,才发现这个工具的威力无穷,毕竟是非常好的工具,第一次都把它的优点都释放出来也不现实,先熟悉一下吧,后面在实战中再不断地学习总结. 它是什么: Fuzzy finder 是一款使 ...
- DbgUiConnectToDbg(ntdll.dll)函数逆向
暂时未解决问题: 1. [fs+0F24h]中存储着什么东西. 答案:其存放着被调试程序的DbgObject句柄._NtCreateDebugObject(ntoskrnl.exe)函数逆向分析 该 ...
- Shell(三):echo、printf、test命令
一.echo 1.显示普通字符串: echo "today is a wonderful day" 这里的双引号可以省略. 2.显示转义字符: echo "\" ...
- arcgis api 4.x for js 结合 react 入门开发系列react全家桶实现加载天地图(附源码下载)
基于两篇react+arcgis的文章介绍,相信大家也能体会两者的开发区别了.在“初探篇”中作者也讲述了自己的选择,故废话不多说,本篇带大家体验在@arcgis/webpack-plugin环境下,使 ...
- MYSQL 复制整个数据库
同一个服务器 mysqldump old -u root -p123456 | mysql new -u root -p123456 不同服务器(在源数据库服务器上执行) mysqldump old ...