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. day_93_11_25爬虫一requests,项目框架

    总结 nginx反向代理与正向代理. 正向带里就是,客户端通过中转服务器,访问其它他服务器的数据. 反向代理就是用户访问中转服务器,看起来就像和这台服务器交互一样. nginx动静分离. 当客户端访问 ...

  2. WPF 精修篇 DataGrid 数据源排序

    原文:WPF 精修篇 DataGrid 数据源排序 效果 <DataGrid x:Name="datagrid" ItemsSource="{Binding Ele ...

  3. ssh 免密码登录服务器

    本机生成 ssh key ssh-keygen -t rsa -C "your_email@example.com" 上传公钥文件(假设用户为 user,服务器 ip 为 1.2. ...

  4. celery定时器

    Celery 1.什么是Clelery Celery是一个简单.灵活且可靠的,处理大量消息的分布式系统 专注于实时处理的异步任务队列 同时也支持任务调度 Celery架构 Celery的架构由三部分组 ...

  5. 10-Django中间件

    中间件 Django中的中间件是一个轻量级.底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入和输出. 中间件的设计为开发者提供了一种无侵入式的开发方式,增强了Djang ...

  6. 基于python的selenium常用操作方法(1)

    1 selenium定位方法    Selenium提供了8种定位方式. ·         id ·         name ·         class name ·         tag ...

  7. VRF--虚拟路由表

    VRF Virtual routing forwarding,虚拟路由转发表,简称VPN.他能在两个site之间建立两个不用的路由表,相互隔离,把每台交换机逻辑上分成多台虚拟交换机,即多VPN路由转发 ...

  8. 【linux】切换到root用户,并重置root用户密码

    1.切换当前用户 到 root用户 sudo -i 2.重置root用户密码 sudo passwd root

  9. C# Task ContinueWith

    static void Main(string[] args) { Task firstTask = Task.Run(() => { PrintPlus(); }); Task secondT ...

  10. Linux性能分析——分析系统性能相关的命令

    Linux性能分析——分析系统性能相关的命令 摘要:本文主要学习了Linux系统中分析性能相关的命令. ps命令 ps命令用来显示系统中进程的运行情况,显示的是当前系统的快照. 基本语法 ps [选项 ...