Redis 事务提供了一种将多个命令请求打包,然后一次性、按顺序地执行多个命令的机制,并且在事务执行期间,服务器不会中断,会将事务中的所以命令都执行完毕才去处理其他客户端的命令请求。

事务的实现

事务开始

MULTI 命令意味着事务的开始。
事务从开始到结束包含三个阶段:事务开始、命令入队、事务执行。

127.0.0.1:6379> multi
OK

multi 命令将执行命令的客户端从非事务切换到事务状态,这一切换是通过在客户端状态的 flags 属性中打开 REDIS_MULTI 标识完成的。返回客户端 OK。

命令入队

在事务状态中,服务器会立刻执行 exec、discard、watch、multi 四个命令中的一个,而非这些命令将会放入事务事务队列,然后返回 QUEUED。

事务队列
每个 Redis 客户端都有自己的事务状态,这个事务状态保存在客户端状态的 mstate 属性里:

typedef struct redisClient {
// ...multiState mstate;      /* MULTI/EXEC state */
// ...
}typedef struct multiState {multiCmd *commands;     /* Array of MULTI commands */int count;              /* Total number of MULTI commands */int minreplicas;        /* MINREPLICAS for synchronous replication */time_t minreplicas_timeout; /* MINREPLICAS timeout as unixtime. */
} multiState;/* Client MULTI/EXEC state */
typedef struct multiCmd {robj **argv;int argc;struct redisComm,and *cmd;
} multiCmd;

执行事务
当一个处于事务状态的客户端向服务器发送 exec 命令时,这个 exec 命令将立刻被服务器执行,遍历事务队列执行所有命令,最后将执行命令所得的结果全部返回给客户端。

watch 命令的实现

watch 命令是个乐观锁,它可以在 exec 命令执行前,监视任意数量的数据库键。当发现有修改则拒绝事务执行并向客户端返回代表事务执行失败的空回复。

使用 watch 命令监视数据库键
每个 Redis 数据库都保存着一个 watched_keys 字典,键是被 watch 命令监视的数据库键,字典值是所有监视这个键的客户端链表。

监视机制的触发
所有对于数据库进行修改的命令执行后都会调用 multi.c/touchWatchKey 函数对 watched_keys 字典进行检查,如果有客户端正在监视刚刚被命令修改过的数据库键,touchWatchKey 函数会将监视被修改键的客户端的 REDIS_DIRTY_CAS 标识打开,表示客户端的事务安全性被破坏。

判断事务是否安全
当服务器收到客户端发来的 exec 命令时,服务器会根据这个客户端是否打开了 REDIS_DIRTY_CAS 标识来决定是否执行事务。

事务的 ACID 性质

A:Atomicity,原子性;
C:Consistency,一致性;
I:Isolation,隔离性;
D:Durability,耐久性。

原子性
原子性是指将事务中的多个操作作为一个整体来执行,要么全部执行成功,要么一个都不执行。Redis 不支持事务回滚机制,即使事务队列中的某个命令在执行期间出现了错误,整个事务也会继续执行下去,直到将事务队列中的所有命令都执行完毕为止。

一致性
如果数据库在执行事务之前是一致的,那么在事务执行之后无论事务是否执行成功,数据库应该是一致的。一致是指数据符合数据库本身的定义和要求,没有包含非法或者无效的错误数据。

隔离性
即使数据库有多个事务并发地执行,各个事务之间也不会互相影响,并发和串行状态事务产生的结果完全相同。

耐久性
当一个事务执行完毕时,执行这个事务所得到的结果已经被保存到永久存储介质里,即使事务执行完毕后停机,执行事务的结果也不会丢失。

转载于:https://www.cnblogs.com/liushijie/p/5095297.html

Redis学习笔记五:独立功能之事务相关推荐

  1. StackExchange.Redis学习笔记(五) 发布和订阅

    StackExchange.Redis学习笔记(五) 发布和订阅 原文:StackExchange.Redis学习笔记(五) 发布和订阅 Redis命令中的Pub/Sub Redis在 2.0之后的版 ...

  2. Redis学习笔记(一) 数据类型事务异常Jredis

    Redis学习笔记(一) NoSql概述 Nosql四大分类 Redis入门 简介 Windows安装 基础使用 问题 Redis4.0之前为什么是单线程 单线程为什么这么快 Redis4.0后的多线 ...

  3. Redis学习笔记(五)——持久化及redis.conf配置文件叙述

    对于日常使用来说,学习完SpringBoot集成Redis就够我们工作中使用了,但是既然学习了,我们就学习一些Redis的配置及概念,使我们可以更深层次的理解Redis,以及增强我们的面试成功概率,接 ...

  4. python函数是一段具有特定功能的语句组_Python学习笔记(五)函数和代码复用

    本文将为您描述Python学习笔记(五)函数和代码复用,具体完成步骤: 函数能提高应用的模块性,和代码的重复利用率.在很多高级语言中,都可以使用函数实现多种功能.在之前的学习中,相信你已经知道Pyth ...

  5. StackExchange.Redis学习笔记(二) Redis查询 五种数据类型的应用

    StackExchange.Redis学习笔记(二) Redis查询 五种数据类型的应用 原文: StackExchange.Redis学习笔记(二) Redis查询 五种数据类型的应用 Connec ...

  6. Redis学习笔记---Redis的事务

    Redis学习笔记-Redis的事务 1. Redis事务(弱事务)和Mysql事务对比 Atomicity(原子性):构成事务的的所有操作必须是一个逻辑单元,要么全部执行,要么全部不执行. Redi ...

  7. Redis学习笔记(B站狂神说)(自己总结方便复习)

    Redis学习笔记B站狂神说 redis: 非关系型数据库 一.NoSQL概述 1.为什么要用Nosql 1.单机Mysql的年代 思考一下,这种情况下:整个网站的瓶颈是什么? 1.数据量如果太大,一 ...

  8. Redis(学习笔记)

    Redis学习笔记 1.NoSQL数据库 1.1解决的问题 1.1.1解决CPU及内存压力 1.1.2解决IO压力 1.2NoSQL数据库概述 1.2.1什么是NoSQL数据库 1.2.2适用与不适用 ...

  9. Redis学习笔记②实战篇_黑马点评项目

    若文章内容或图片失效,请留言反馈.部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 资料链接:https://pan.baidu.com/s/1189u6u4icQYHg_9_7ovWmA( ...

最新文章

  1. Hive介绍与核心知识点--大数据技术栈12
  2. 关于 someone could be eavesdropping on you right now (man-in-the-middle attack) ssh的解决办法
  3. 2.mysql优化---增删改优化
  4. 网页中JS函数自动执行常用三种方法
  5. luogu P1578 奶牛浴场
  6. Red Hat 6.5 版本虚拟机安装
  7. UVa 401 - Palindromes
  8. 美团云、苏宁云相继停止运营,公有云市场大洗牌
  9. 如何从头开始使用Python实现堆栈泛化(Stacking)
  10. html 转换 swf文件怎么打开,修改网页中的FlashSWF文件的方法
  11. 随机森林在sklearn中的实现
  12. 【微信小程序|Demo】订单结算页面
  13. 【网络空间安全数学基础第8章】环和域
  14. 颜色不透明度 对应表
  15. 均方根与峭度系数_调节阀流量系数的影响因素及其工程应用调节阀流量系数的影响...
  16. Qt写的手机助手-电脑版
  17. MOS逻辑门(反相器/与门/或门/或非门/与非门)
  18. 对OpenGL学习的记录
  19. 数据库原理和应用(4)—— 三个世界及有关概念、数据模型
  20. 如何让Linux系统管理变得更轻松

热门文章

  1. Python3空字符串和len()函数
  2. 【软考】2017年11月软件设计师上午真题5-8题答案解析
  3. JMeter入门案例
  4. 字节、半字、字对齐方式
  5. 计算机考研四大金刚,“四大金刚”考研一个都不少
  6. 星特朗望远镜怎么样_入手曝光评测双筒望远镜星特朗和博冠有何区别?哪个好?体验报告揭秘...
  7. Visual Studio 2017中的编译器工具布局
  8. emui10有机会升级鸿蒙,鸿蒙OS+EMUI10,能否助力华为实现科技突围?
  9. 山东管理学院计算机专业在哪个校区,2019年山东管理学院新生在哪个校区及新生开学报到时间...
  10. 触摸屏通常接在微型计算机,计算机应用基础习题答案.doc