Redis 事务

Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证:

  • 批量操作在发送 EXEC 命令前被放入队列缓存。
  • 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。
  • 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。

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

  • 开始事务。
  • 命令入队。
  • 执行事务。

实例

以下是一个事务的例子, 它先以 MULTI 开始一个事务, 然后将多个命令入队到事务中, 最后由 EXEC 命令触发事务, 一并执行事务中的所有命令:

redis 127.0.0.1:6379> MULTI
OKredis 127.0.0.1:6379> SET book-name "Mastering C++ in 21 days"
QUEUEDredis 127.0.0.1:6379> GET book-name
QUEUEDredis 127.0.0.1:6379> SADD tag "C++" "Programming" "Mastering Series"
QUEUEDredis 127.0.0.1:6379> SMEMBERS tag
QUEUEDredis 127.0.0.1:6379> EXEC
1) OK
2) "Mastering C++ in 21 days"
3) (integer) 3
4) 1) "Mastering Series"2) "C++"3) "Programming"

单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。

事务可以理解为一个打包的批量执行脚本,但批量指令并非原子化的操作,中间某条指令的失败不会导致前面已做指令的回滚,也不会造成后续的指令不做。

这是官网上的说明 From redis docs on transactions:

It's important to note that even when a command fails, all the other commands in the queue are processed – Redis will not stop the processing of commands.

比如:

redis 127.0.0.1:7000> multi
OK
redis 127.0.0.1:7000> set a aaa
QUEUED
redis 127.0.0.1:7000> set b bbb
QUEUED
redis 127.0.0.1:7000> set c ccc
QUEUED
redis 127.0.0.1:7000> exec
1) OK
2) OK
3) OK

如果在 set b bbb 处失败,set a 已成功不会回滚,set c 还会继续执行。


Redis 事务命令

下表列出了 redis 事务的相关命令:

序号 命令及描述
1 DISCARD 
取消事务,放弃执行事务块内的所有命令。
2 EXEC 
执行所有事务块内的命令。
3 MULTI 
标记一个事务块的开始。
4 UNWATCH 
取消 WATCH 命令对所有 key 的监视。
5 WATCH key [key ...] 
监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。

Redis学习---(14)Redis 事务相关推荐

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

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

  2. Redis学习笔记~Redis在windows环境下的安装

    Redis是一个key-value的存储系统,它最大的特点就是可以将数据序列化到文件中. redis存储在服务器的内存或者文件中,它不是session,不是cookies,它只是个更安全,更稳定,更可 ...

  3. 【Redis】14.Redis高级数据类型Bitmaps、HyperLogLog、GEO

    [Redis]14.Redis高级数据类型Bitmaps.HyperLogLog.GEO Bitmaps:用比特位进行快速的状态统计 Bitmaps基本操作 Bitmaps不是一个新的数据类型,而是s ...

  4. Redis学习笔记---Redis的主从复制

    Redis学习笔记-Redis的主从复制 1.Redis的高可用性 高可用性(High Availability)通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性. Rei ...

  5. Redis学习笔记---Redis的模式订阅与退订

    Redis学习笔记-Redis的模式订阅与退订 1.发布订阅简介 发布订阅是一种通信的模式,Redis提供了发布订阅功能,可以用于消息的传输 Redis的发布订阅机制包括三个部分,publisher( ...

  6. 【Redis学习】Transaction事务管理

    1.相关命令: (1)MULTI 标记一个事务块的开始.事务块内的多条命令会按照先后顺序被放进一个队列当中,最后由 EXEC 命令原子性(atomic)地执行. 返回值:总是返回 OK . redis ...

  7. Redis 学习 - 2.Redis高级:RDB AOF 事务 锁 删除策略 Bitmaps HyperLogLog GEO

    目录 2. Redis高级 2.1 Redis Linux安装 047-Linux安装redis 048-指定端口启动服务 049-指定配置文件启动服务 050-配置文件启动目录管理 2.2 持久化 ...

  8. 【Redis学习】Redis管理命令总结

    1.键管理 之前通过对五种数据类型的操作命令的学习发现,Redis在对每种数据进行处理之前,都要先指定该数据的key,然后再指定对该数据进行何种操作. Redis中的key有点类似于Java中的变量名 ...

  9. Redis学习之Redis概述及原理、基本操作及持久化

    一.Redis介绍 Redis是一个开源的使用ANSI C语言编写.遵守BSD协议.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API. 它通常被称为数据结构服务 ...

  10. Redis学习之Redis概述与安装以及性能测试

    Redis入门 概述 Redis是什么 Redis(remote dictionary server)远程字典服务器 是一个开源的使用c语言编写.支持网络.可基于内存亦可持久化的日志型.key-val ...

最新文章

  1. java-mybaits-00101-基础安装配制
  2. 剑指offer-面试题13.在O(1)时间删除链表节点
  3. 【JDK1.8】Java HashMap实现细节
  4. laravel项目白屏问题解决办法及原因
  5. 传送带(洛谷-P2571)
  6. 远离ARP*** ARP防火墙新版发布
  7. 华为平板wps语音朗读_打工人必备的手机端WPS小技巧
  8. 【OpenStack】【Keystone】安装与配置详解
  9. Android 系统(83)---屏幕尺寸
  10. Replication Backlog
  11. python导入自定义模块_ubuntu下Python导入自定义模块的方法
  12. Linux计划任务之_Crontab
  13. 关于单利模式的几种实现方式
  14. beanstalkd最佳实践-编程开发
  15. android 圆形进度条样式,Android编程之ProgressBar圆形进度条颜色设置方法
  16. LLC谐振变换器工作模态分析
  17. 诺基亚CEO埃洛普的2012:煎熬中看到希望
  18. js截取url问号前面_JS获取URL中问号后面参数值
  19. 一年规划: 服务器后端+分布式+微服务+具有产品思维,20210504
  20. jquery 自动触发事件tigger()

热门文章

  1. strassen算法java_使用java写的矩阵乘法实例(Strassen算法)_Java_软件编程
  2. ubuntu10.04下 简单配置samba
  3. java8 functionalinterface注解_@FunctionalInterface注解的使用
  4. php oracle数据库连接池,数据库管理Oracle 连接池信息的修改
  5. redis怎么确认启动成功_不懂分Redis?现在开始动手!
  6. 计算机专业自我总结1000字,计算机专业自我鉴定范文1000字
  7. Java面试之设计模式七大原则
  8. Mysql的七种表类型
  9. [BZOJ3566][SHOI2014]概率充电器
  10. Python学习 第3天 VS与PyCharm使用对比