Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。这意味着通常情况下一个请求会遵循以下步骤:

客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应。

服务端处理命令,并将结果返回给客户端。

Redis 官方文档:https://redis.io/topics/pipelining

提高性能

Redis 管道技术可以在服务端未响应时,客户端可以继续向服务端发送请求,并最终一次性读取所有服务端的响应。

管道技术最显著的优势是提高了 redis 服务的性能。

Redis 事务

简介

Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证:

  1. 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。
  2. 事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。

一个事务从开始到执行会经历以下三个阶段:

  1. 开始事务。
  2. 命令入队。
  3. 执行事务。

命令行

在不使用 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的更多相关文章

  1. Redis - pipelining(管道)

    客户端向服务器发送一个查询请求,并监听 socket 返回,等待服务器响应.通常是阻塞模式,在收到服务器响应之前是挂起的,不能继续发送请求. 可以使用管道来改善这种情况.在使用管道的情况下,客户端可以 ...

  2. <Redis Advance><Pipelining><Memory Optimization><Expire><Transactions>

    Overview About Redis pipelining About Redis memory optimization About Redis expire About Redis trans ...

  3. Redis 请求应答模式和往返延时 Pipelining

    Redis是一个CS结构的TCP服务器,使用”请求-应答”的模式.,客户端发起一个请求是这样的步骤: 客户端发送一个请求给服务器,然后等待服务器的响应,一般客户端使用阻塞模式来等待服务器响应. 服务器 ...

  4. Redis(六)管道(Pipelining)

    管道技术并不是Redis特有的,管道技术在计算机科学中有很多地方的应用. 来自wiki的解释: In computing, a pipeline, also known as a data pipel ...

  5. twemproxy explore,redis和memcache代理服务器

    twemproxy,也叫nutcraker.是一个twtter开源的一个redis和memcache代理服务器. redis作为一个高效的缓存服务器,非常具有应用价值.但是当使用比较多的时候,就希望可 ...

  6. 转载----How fast is Redis?

    How fast is Redis? Redis includes the redis-benchmark utility that simulates running commands done b ...

  7. Redis资料汇总专题

    1.Redis是什么? 十五分钟介绍 Redis数据结构 Redis系统性介绍 一个很棒的Redis介绍PPT 强烈推荐!非同一般的Redis介绍 Redis之七种武器 锋利的Redis redis ...

  8. redis资料汇总

    redis资源比较零散,引用nosqlfan上的文章,方便大家需要时翻阅.大家看完所有的,如果整理出文章的,麻烦知会一下,方便学习. 1.Redis是什么? 十五分钟介绍 Redis数据结构 Redi ...

  9. Redis 代理服务Twemproxy

    1.twemproxy explore 当我们有大量 Redis 或 Memcached 的时候,通常只能通过客户端的一些数据分配算法(比如一致性哈希),来实现集群存储的特性.虽然Redis 2.6版 ...

随机推荐

  1. IT兄弟连 Java语法教程 综合案例

    1.案例需求 编写程序,模拟斗地主游戏洗牌和发牌的流程. 2.应用知识 ●  数组的声明 ●  数组的遍历 ●  for循环 ●  if-else分支结构 3.需求解析 模拟斗地主游戏洗牌和发牌,需要 ...

  2. Percona XtraDB Cluster简易入门 - 安装篇

    说明 Percona XtraDB Cluster(简称PXC),是由percona公司推出的mysql集群解决方案.特点是每个节点都能进行读写,且都保存全量的数据.也就是说在任何一个节点进行写入操作 ...

  3. redis pipeline批量处理提高性能

    Redis使用的是客户端-服务器(CS)模型和请求/响应协议的TCP服务器.Redis客户端与Redis服务器之间使用TCP协议进行连接,一个客户端可以通过一个socket连接发起多个请求命令.每个请 ...

  4. webpack资源处理

    使用上篇已谈过,这篇纯代码!!~~ <!DOCTYPE html> <html lang="en"> <head> <meta chars ...

  5. FCC---Use CSS Animation to Change the Hover State of a Button---鼠标移过,背景色变色,用0.5s的动画制作

    You can use CSS @keyframes to change the color of a button in its hover state. Here's an example of ...

  6. 「SAP 技术」SAP MM 给合同的ITEM上传附件以及附件查询

    SAP MM 给合同的ITEM上传附件以及附件查询 1,使用事务代码 CV01N为合同上传附件, Document:输入6100000829, Document type 101 (contract) ...

  7. 2019年上半年收集到的人工智能GAN干货文章

    2019年上半年收集到的人工智能GAN干货文章 GAN简介及其常见应用 训练GAN,你应该知道的二三事 了解生成对抗网络(GAN) CosmoGAN:训练GAN,让AI寻找宇宙中的暗物质 关于GAN的 ...

  8. 【微信小程序】App.js生命周期

    1.小程序的生命周期-App.js App() 必须在 app.js 中注册,且不能注册多个.所以App()方法在一个小程序中有且仅有一个. App({ onLaunch: function () { ...

  9. [b0003] 总览:Hadoop 个人学习路线进展

    3.   Spark 搭建  过 1.1   搭建伪分布式2.0.1  ok 2016-10-23  耗时 2h ref  [0006] Spark 2.0.1 伪分布式搭建练手 后续: 1.2 分布 ...

  10. typora使用说明

    一级标题 # 空格 编写内容 二级标题 ## 空格 编写内容 有序内容 1.+Tab 无序内容 -+Tab 代码块 print("hello wrold") typora快捷键 c ...