当前位置: 首页 > news >正文

Redis学习笔记——第19章 事务

第19章 事务

19.1 事务的实现

19.1.1 事务开始

使用multi命令开启一个事务
通过修改客户端的flags字段为REDIS_MULTI

19.1.2 命令入队

当开启事务之后,exec、discard、watch、multi命令立即执行,而其他命令会放入一个队列中,并返回Queued

19.1.3 事务队列

客户端的mstate保存事务队列,事务保存了参数与执行函数,是一个先进先出的队列

19.1.4 执行事务

遍历事务列表并将结果全部返回给客户端(一次性)

19.2 watch命令的实现(乐观锁)

用以在exec之前监视数据库键,当事务修改了这些键时,事务exec失败

19.2.1 使用watch命令监视数据库键

被监视的键保存为一个字典,值为监视这个键的客户端链表

19.2.2 监视机制的触发

当客户端监视了某个键时,若键被修改,则将监听该键的客户端标识改为REDIS_DIRIY_CAS来使其感知

19.2.3 判断事务是否安全

在执行exec命令时,查看标识是否为REDIS_DIRIY_CAS,若是,则不执行任务

19.2.4 一个完整的watch事务执行过程

在一个客户端加了watch,开启事务之后,若其他客户端修改了watch中操作的键之后,会将watch这些键的客户端标识修改为REDIS_DIRIY_CAS,该客户端再执行exec命令便会被拒绝

19.3 事务的ACID属性

19.3.1 原子性

如果在入队期间发现命令错误,则不会执行,但是如果在执行期间发生异常,则不会回滚整个事务,因此不具有原子性

19.3.2 一致性

redis数据库具有一致性,不会因为特殊情况出现导致redis数据库丢失这种特性

19.3.3 隔离性

redis数据库是单线程数据库,则一定具有隔离性

19.3.4 持久性

只有每次执行事务前使用SAVE命令才可以保证事务具有持久性,但是这种做法效率低下,所以可以认为redis数据库不具有持久性

http://www.lryc.cn/news/415259.html

相关文章:

  • 元太电磁膜SUDE-10S19MI-01X驱动适配
  • C#数据类型 全局变量 类型转换方法(汇总)
  • HCIP重修总笔记(中)
  • 图片搜索网站,有大量高清图片,避免版权纠纷
  • 设计学习笔记8:在设计模式中,状态模式和策略模式有什么区别,它们各自适用于什么场景?
  • Android 10.0 系统默认蓝牙打开状态栏显示蓝牙图标功能实现
  • 在git中如何忽略.vscode目录?
  • 分布式系统
  • 【Material-UI】Autocomplete 组件中的事件处理(Events)详解
  • 【51单片机仿真】基于51单片机设计的钟表定时闹钟系统仿真源码设计文档演示视频——完整资料下载
  • 《刚刚问世》系列初窥篇-Java+Playwright自动化测试-7-元素基础定位方式-下篇 (详细教程)
  • [Day 44] 區塊鏈與人工智能的聯動應用:理論、技術與實踐
  • 【Redis】 Redis 列表指令指南
  • 设计测试用例的具体方法
  • GPT-4o mini(假设模型)概览
  • 抽象代数精解【9】
  • 熟悉简单测试面经
  • IoTDB 入门教程 实战篇④——C#示例(开源)
  • STL-vector容器
  • python字符串与变量名互相转换,字典,list操作
  • 企业及园区电力能源管理系统方案
  • 5.3 需求分析
  • 【C++】list介绍以及模拟实现(超级详细)
  • 从艺术创作到作物生长,农业AI迎来“GPT“时刻
  • 前端使用 Konva 实现可视化设计器(19)- 连接线 - 直线、折线
  • C#:通用方法总结—第15集
  • LoadRunner12 添加事务并添加检查点
  • python中的文件
  • Powerdesigner连接mysql数据库,逆向工程生成ER图 (保姆级教程:下载->连接->配置)看这一篇就够了
  • 商家转账到零钱分销返佣申请方案及驳回处理办法