Redis事务

Redis的事务主要依赖于WATCH ,UNWATCH,MULTI , EXEC, DISCARD等命令。 其中 MULTI , EXEC , DISCARD 分别对应关系型数据库的 BEGIN,COMMIT,ROLLBACK操作。

Redis事务执行过程

客户端使用MULTI命令开启事务,此时用户就可以开始发出要执行的命令。 **如果命令为WATCH/MULTI/EXEC/DISCARD这四个中的任意一个, 那么会被直接执行,**因为它们属于事务操作。

当执行DISCARD的时候,会清空事务队列并退出事务。 如果是普通命令,就将命令加入事务队列,然后当EXEC命令执行时, 事务中的队列将会被一一执行,最后执行的结果也是一个数组。

参考: Redis事务的设计与实现

Redis事务队列

在开启事务后,用户命令并不会被立刻执行,而是被添加到事务队列中, 这个队列其实是一个数组,每个数组元素由3部分组成:

  1. 要执行的命令(cmd)
  2. 命令的参数(argv)
  3. 参数的数量(argc)

命令被添加到队列中的结构大致如下:

命令被执行后,也会生成一个结果数组,Redis就将这个结果数组返回:

Redis事务错误

Redis事务有两个错误时机。

  • EXEC执行命令之前出现错误: 在EXEC命令之前的错误,也就是开启事务后,用户发出了错误的命令, 参数数量不对或其他原因,服务端会累积这些错误。 当EXEC命令执行时,将拒绝执行事务,并返回错误原因,清空事务队列。

  • EXEC执行命令时出现错误: EXEC执行命令时出现错误,也就是用户发出的命令没有错, 但是在执行命令的时候出现了错误(可能是参数类型不对),这时候仍然返回结果数组, 也就是说错误的命令并不影响其他命令的执行。

【带你重拾Redis】Redis事务相关推荐

  1. 【带你重拾Redis】Redis常见知识点

    什么是Redis? Redis是一个使用ANSI C语言编写,遵守BSD协议规范的开源的K-V类型的NoSQL数据库服务器. Redis是当前最流行的K-V类型的NoSQL数据库之一,在通往系统架构的 ...

  2. 【带你重拾Redis】Redis 哨兵集群实现高可用

    Redis 哨兵集群实现高可用 哨兵的介绍 sentinel,中文名是哨兵.哨兵是 Redis 集群架构中非常重要的一个组件,主要有以下功能: 集群监控:负责监控 Redis master 和 sla ...

  3. 【带你重拾Redis】Redis 主从架构

    Redis 主从架构 单机的 Redis,能够承载的 QPS 大概就在上万到几万不等.对于缓存来说,一般都是用来支撑读高并发的.因此架构做成主从(master-slave)架构,一主多从,主负责写,并 ...

  4. 【带你重拾Redis】Redis数据结构及使用场景

    Redis数据结构 Redis有着非常丰富的数据结构,这些数据结构可以满足非常多的应用场景, 如果对这些数据结构有一个比较清晰的认知,使用Redis也会更加得心应手. Redis主要支持以下数据结构: ...

  5. 【带你重拾Redis】Redis持久化

    Redis持久化 Redis有2种持久化策略: RDB和AOF. RDB(Redis Data Base) RDB是Redis默认的持久化策略,这种策略是把数据库的快照以二进制形式的副本保存在磁盘上. ...

  6. 【带你重拾Redis】Redis过期策略 和 内存淘汰策略(key回收)

    过期策略 我们set key的时候,都可以给一个expire time,就是过期时间,指定这个key比如说只能存活1个小时,我们自己可以指定缓存到期就失效. 如果假设你设置一个一批key只能存活1个小 ...

  7. 万字大白话带你重拾计算机网络

    你是一台电脑,你的名字叫 A 很久很久之前,你不与任何其他电脑相连接,孤苦伶仃. 直到有一天,你希望与另一台电脑 B 建立通信,于是你们各开了一个网口,用一根网线连接了起来. 用一根网线连接起来怎么就 ...

  8. 万字大白话带你重拾JVM

    前言 如果在文中用词或者理解方面出现问题,欢迎指出.此文旨在提及而不深究,但会尽量效率地把知识点都抛出来 一.JVM的基本介绍 JVM 是 Java Virtual Machine 的缩写,它是一个虚 ...

  9. Redis最佳实践:7个维度+43条使用规范,带你彻底玩转Redis | 附实践清单

    阅读本文大约需要 16 分钟. 大家好,我是 Kaito. 这篇文章我想和你聊一聊 Redis 的最佳实践. 你的项目或许已经使用 Redis 很长时间了,但在使用过程中,你可能还会或多或少地遇到以下 ...

最新文章

  1. asp.net中生命周期的浅析
  2. Leet Code OJ 58. Length of Last Word [Difficulty: Easy]
  3. C# 获得窗体句柄并发送消息(利用windows API可在不同进程中获取)
  4. OpenWrt 之 MT7628 使用GPIO中断
  5. layui 数据表格代码
  6. 翼方健数邓振:“DRG+AI”助力实现医院精细化管理
  7. python分割文件为小文件_Python实现将一个大文件按段落分隔为多个小文件的简单操作方法...
  8. 小白进阶之影片TS版,TC版,CAM版,HD版,BD版,DVD,HDVD等版本介绍
  9. android视频教程地址
  10. 冯乐乐之一 图形学基础 Shader入门精要
  11. 中国首台超级计算机“天河一号,我国首台超级计算机“天河一号”超负荷运行...
  12. mfc 程序图标变模糊_怎么把模糊的图片变清晰
  13. 小A与小姐姐给气球涂色 题目描述 小A与小姐姐闲的无聊,它们路过一家商店,看见里面有很多无色的气球,于是他们突然有一
  14. Mybatis代码自动生成配置文件
  15. 迅雷可以下载的文件是forum.php,让论坛进化!“迅雷附件”功能简介
  16. 基于python OpenCV多边形图像识别的实现
  17. Hive小咖,是时候穿上你的振金战衣! 与职场高阶雷神之锤High-Five了!!!
  18. 本地数据库同步到云主机上
  19. 2016谷歌重返中国,体验Google中国开发者网站
  20. BeanUtils的拷贝

热门文章

  1. 使用dplyr进行数据操作(30个实例)
  2. pandas使用replace函数将dataframe中None值以及其他异常编码值(例如,9999)替换为np.nan
  3. python使用生成器生成浮点数列表、使用生成器生成(正)负的浮点数列表
  4. R语言sys方法:sys.info函数获取系统和用户信息、sys.localeConv函数获取当前区域中的数字和货币表示的详细信息、sys.setFileTime函数更改文件的时间
  5. R语言使用ggplot2包使用geom_density()函数绘制分组密度图(改变图例位置、移除图例)实战(density plot)
  6. R可视化ggplot2中绘制趋势线
  7. GPU信息查看以及确认Pytorch使用了GPU计算模块进行深度学习的训练
  8. 坐标下降+随机梯度下降
  9. oligo包处理原始芯片数据
  10. python 南京大学_南京大学python课程系列笔记之python基础之第一周:走进python