iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python:深入理解Redis事务
  • 491
分享到

Python:深入理解Redis事务

2023-06-01 23:06:30 491人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

1.从数据库事务说起通常我们提及数据库都不可避免的要提到事务,那么什么是事务呢?事务是指作为单个逻辑工作单元执行的一系列操作。所以,首先事务是一系列操作,这一系列操作具有二态性,即完全地执行或者完全地不执行。因此事务处理可以确保除非事务单元

1.从数据库事务说起

通常我们提及数据库都不可避免的要提到事务,那么什么是事务呢?事务是指作为单个逻辑工作单元执行的一系列操作。所以,首先事务是一系列操作,这一系列操作具有二态性,即完全地执行或者完全地不执行。因此事务处理可以确保除非事务单元内的所有操作的成功完成,否则不会想数据库更新面向数据的资源。我们这里举一个例子,数据库中除查询操作以外,插入(Insert)、删除(Delete)和更新(Update)这三种操作都会对数据造成影响,因为事务处理能够保证一系列操作可以完全地执行或者完全不执行,因此在一个事务被提交以后,该事务中的任何一条sql语句在被执行的时候,都会生成一条撤销日志(Undo Log),而撤销日志中记录的是和当前擦作完全相反的操作,比如删除的相反操作是插入,插入的相反操作是删除等。我们通常所说的事务回滚其实就是去执行这些插销日志里的相反操作,这同样告诉我们一个道理,只有事务中的一系列操作完全执行的情况下可以回滚,如果是在意外情况下导致事务中的一系列操作没有完全执行,这个时候我们是不能保证数据一定可以回滚的。

在数据库相关理论中,一个逻辑工作单元想要成为事务,就必须满足ACID,即原子性、一致性、隔离性和持久性。

  • (1)原子性:原子性这个概念其实就是指,一个事务内的所有SQL操作都是一个整体,因此只有所有的SQL操作都完全执行成功,该事务方可以认为提交成功。如果在提交事务过程中某一条SQL语句执行失败,则整个事务必须回滚到事务提交前的状态。
  • (2)一致性:而一致性这个概念则是指,事务在完成的时候,必须要保证所有的数据都保持一致的状态,而落实到数据库的各个组成部分上,则要求开发人员能够保证数据、索引、约束、日志等在事务前后具备一致性。
  • (3)隔离性:隔离性这个概念主要针对并发,其核心思想就是不同的并发事务对数据产生的修改必须是相互隔离的,假设有两个不同的事务A和B并发执行,那么对A来讲,它在执行前的状态只有两种,即B执行前和B执行后。同理,对B来讲同样是如此,这样的特性我们就称为隔离性。
  • (4)持久性:持久性相对简单,是指事务完成以后它对数据的影响是永久性的。

2.Redis中的事务处理

我们对数据库中事务处理的相关理论有了一个基本的认识,或许这个世界上的数据库系统千差万别,但我相信在事务处理这个问题上它们最终会殊途同归,就像我们解决并发过程中的冲突问题,常规的做法依然是加一样,这是我之所以要花费精力去理解和解释这些理论知识的原因,技术可谓是日新月异,如果我们总是一味地为新技术而疲于奔命,那么或许我们会渐渐地失去对这个行业的热爱,我相信原理永远比框架更为重要。

Redis事务提供了一种“将多个命令打包, 然后一次性、按顺序地执行”的机制, 并且事务在执行的期间不会主动中断 —— 服务器在执行完事务中的所有命令之后, 才会继续处理其他客户端的其他命令。

Redis中的事务是可以视为一个队列,即我们可以通过MULTI开始一个事务,这相当于我们声明了一个命令队列。接下来,我们向Redis中提交的每条命令,都会被排入这个命令队列。当我们输入EXEC命令时,将触发当前事务,这相当于我们从命令队列中取出命令并执行,所以Redis中一个事务从开始到执行会经历 开始事务 、 命令入队 和 执行事务 三个阶段。下面是一个在Redis中使用事务的简单示例:

127.0.0.1:6379> MULTI 
OK
127.0.0.1:6379> SET Book_Name "git Pro"
QUEUED
127.0.0.1:6379> SADD Program_Language "c++" "C#" "Jave" "python"  
QUEUED
127.0.0.1:6379> GET Book_Name
QUEUED
127.0.0.1:6379> EXEC
1) OK
2) (integer) 4
3) "GIt Pro"

我们可以注意到Redis中的事务和通常意义上的事务基本上是一致的,即

  • 事务是由一系列操作组成的单个逻辑工作执行单元。特别地,因为在Redis中命令是存储在一个队列中,所以,事务中的所有命令都会按顺序执行,并且在执行事务的过程中不会被客户端发送的其它命令中断。
  • 事务是一个原子操作,事物中的命令只有两种执行结果,即全部执行或者全部不执行。如果客户端在使用MULTI命令开启事务后因为意外而没有执行EXEC命令,则事务中的所有命令都不会执行。同理,如果客户端在使用MULTI命令开启事务后执行EXEC命令,则事务中的所有命令都会执行。
  • Redis中的事务可以使用DISCARD命令来清空一个命令队列,并放弃对事务的执行。如果命令在入队时发生错误,Redis将在客户端调用EXEC命令时拒绝执行并取消事务,但是在EXEC命令执行后发生的错误,Redis将选择自动忽略。

3.redis事务执行过程

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

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

下面将分别介绍事务的这三个阶段。

1)开始事务

MULTI命令的执行标记着事务的开始:

redis> MULTI
OK

这个命令唯一做的就是, 将客户端的 REDIS_MULTI 选项打开, 让客户端从非事务状态切换到事务状态。

Python:深入理解Redis事务

--结束END--

本文标题: Python:深入理解Redis事务

本文链接: https://www.lsjlt.com/news/227974.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python:深入理解Redis事务
    1.从数据库事务说起通常我们提及数据库都不可避免的要提到事务,那么什么是事务呢事务是指作为单个逻辑工作单元执行的一系列操作。所以,首先事务是一系列操作,这一系列操作具有二态性,即完全地执行或者完全地不执行。因此事务处理可以确保除非事务单元内...
    99+
    2023-06-01
  • 如何深入理解Redis事务
    本篇内容主要讲解“如何深入理解Redis事务”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何深入理解Redis事务”吧!Redis可以看成NoSQL类型的数据...
    99+
    2024-04-02
  • 深入理解redis中multi与pipeline
    背景 由于对redis缓存中数据有批量操作,例如预热缓存数据,或者在列表页批量去获取缓存数据,在使用了multi批量提交事务后,发现redis压力高居不下,而使用了pipeline...
    99+
    2024-04-02
  • 深入理解redis的持久化
    最近工作之余学习了一下redis,这里简单的理解一下redis持久化; Redis提供的持久化机制 Redis是一种面向“key-value”类型数据的分布式NoSQL数据库系统,具有高...
    99+
    2024-04-02
  • 深入解析MySQL 事务
    目录事务的四大特性 ( ACID )脏读不可重复读幻读MySQL的隔离级别事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败。 事务的四大特性 ( ACID ...
    99+
    2024-04-02
  • 深入理解 Python yield
    yield的英文单词意思是生产,刚接触Python的时候感到非常困惑,一直没弄明白yield的用法。一直到稀里糊涂的看完了廖雪峰的python博客也没彻底明白。 有一次不小心看到了这个文章,是转载的,原文出自哪里我也不知道...
    99+
    2023-01-31
    Python yield
  • Redis字符串原理的深入理解
    前言 来掘进都有两年多了一直当个小透明,今天终于发一次文章了. 最近在看 Redis,感觉收获很多,写篇博客记录一下. Redis 有五种基础数据结构:string,list,set,zset,has...
    99+
    2024-04-02
  • 深入理解JavaScript事件机制
    目录如何实现一个事件的发布订阅介绍下事件循环宏任务和微任务的区别如何实现一个事件的发布订阅 可以通过以下步骤实现 JavaScript 中的发布-订阅模式: 创建一个事件管理器对象。...
    99+
    2023-05-17
    JavaScript事件机制 JS事件机制
  • 深入理解mysql事务与存储引擎
    目录一、MySQL事务1、事务的概念2、事务的 ACID 特点3、事物之间的互相影响二、Mysql及事务隔离级别1、查询全局事务隔离级别2、查询会话事务隔离级别3、设置全局事务隔离级...
    99+
    2024-04-02
  • 深入理解python之一——python
    文章使用markdown写的,编辑的时候行间距还可以,显示的时候行间距好小,我也没办法。 首先,需要明白的是python是一种解释性语言标准,他可以由c、java或者其他语言来实现。在python的标准中,变量是链接式的。举个例子来说,内...
    99+
    2023-01-30
    python
  • 深入理解异步事件机制
    通过了解异步设计的由来,来深入理解异步事件机制。 代码地址 什么是异步 同步 并发(Concurrency) 线程(Thread) I/O多路复用 异步(Asynchronous) 回调(Callback) 参考文...
    99+
    2023-01-31
    机制 事件
  • 如何深入理解Redis分布式锁
    这篇文章主要介绍“如何深入理解Redis分布式锁”,在日常操作中,相信很多人在如何深入理解Redis分布式锁问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何深入理解Redi...
    99+
    2024-04-02
  • Qt 事件处理机制的深入理解
    目录1.Qt中事件的来源,谁接收处理。2.事件处理顺序3.事件过滤器4.event方法5.鼠标进入事件6.accept(),ignore()1.Qt中事件的来源,谁接收处理。 Qt中...
    99+
    2024-04-02
  • 深入理解 python 虚拟机
    在本篇文章当中主要给大家介绍 cpython 虚拟机对于字节码的设计以及在调试过程当中一个比较重要的字段 co_lnotab 的设计原理! python 字节码设计 一条 pytho...
    99+
    2023-05-14
    Python虚拟机运行原理 python虚拟机详解 python虚拟机是什么
  • 深入理解Python中的__builti
    0.说明        这里的说明主要是以Python 2.7为例,因为在Python 3+中,__builtin__模块被命名为builtins,下面主要是探讨Python 2.x中__builtin__模块和__builtins__模块...
    99+
    2023-01-31
    Python __builti
  • 深入理解Python的元类
    目录什么是元类type元类动态创建类自定义元类总结什么是元类 Python中,一切皆对象,我们定义的数字、字符串、函数、列表等都是对象,对象是类(class)的是实例,而类(clas...
    99+
    2024-04-02
  • 深入理解python中的ThreadLocal
    ThreadLocal在threading模块中,可以见得它是为我们的线程服务的。 它的主要作用是存储当前线程的变量,各个线程之间的变量名是可以相同的,但是线程之间的变量是隔离的,也...
    99+
    2023-03-08
    python ThreadLocal
  • 深入理解C#窗体关闭事件
    目录1、第一步2、第二步3、最后可以检查一下设计designer.cs的文件看看对不对很多初学者都想把默认的C#关闭按钮事件弄明白,主要用在我想关闭窗口但是我还想在关闭前有一个提示,...
    99+
    2024-04-02
  • 深入理解MySQL事务的4种隔离级别
    目录1 简介2 什么是数据库事务?2.1 事务的四大特性(ACID)3 并发事务会导致的问题3.1 本文会使用到的 SQL 语句3.1.1 示例表结构3.1.2 查询事务的默认隔离级...
    99+
    2024-04-02
  • 带大家深入了解Spring事务
    目录一、数据库事务简介二、事务的特性三、事务的隔离级别四、Spring事务五、PlatformTransactionManager简介六、Spring事务隔离级别和传播级别一、数据库...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作