事务可以简单理解为:把多件事当做一件事情处理,要么一起成功,要么一起失败。在Spring中可以配置一个事务管理器,然后在要进行事务处理的方法上添加@Transactional注解就可以了。

对于redis事务,无外乎如此,有时候为了同时处理多个结构,会向redis发送多个redis命令。使用redis事务可以保证一个客户端在不被其他客户端打断的情况下执行多个redis命令。

对于redis事务,我会从以下方面介绍:

  1. 什么是Redis的事务
  2. redis事务涉及的命令与用法
  3. 如何实现redis事务

什么是redis事务

redis中的事务是一组redis命令的集合,开启redis事务后,这组redis命令会当做一个原子操作被redis执行。

通过将一个个redis命令发送给redis,再由redis执行这些命令。发送给redis的这组命令并不会立即执行,只有当客户端通知redis可以执行了才会开始执行并将执行结果返回客户端。

与关系数据库中可以回滚的事务不同在于,redis事务中被MULTIEXEC包裹的命令会一个接一个地执行,直到所有命令都执行完毕。当一个事务处理完毕,才会处理另一个客户端的命令。

也就是说,redis事务是针对一个客户端而言的,所以在redis分片部署模式下是不能处理事务的。

redis事务命令与用法

包括MULTIEXECWATCHUNWATCHDISCARD

MULTI:开始一个事务

EXEC:提交事务执行

WATCH:监视一个或多个key的变化,一旦有一个key发生了变化,之后的事务就不会执行,监视持续到EXEC命令

UNWATCH:取消WATCH命令对key的监视。每个客户端只会取消自己WATCH的key,而不会对其他客户端有影响

DISCARD:取消WATCH命令对key的监视并清空已入队命令

如何实现redis事务

演示如下:

首先监视key的变化,之后修改key的值为value2,然后开启事务,修改key的值为value3,使用EXEC提交事务执行,最后失败了。重新获取key的值为value2,说明事务执行失败。执行EXEC后会redis队列事务命令清空并自动取消对WATCH的key的监视,效果等同于DISACRD,这也是为什么EXEC后不需要执行DISCARD命令的原因。

假如redis事务中有命令出现语法错误,那么执行EXEC会直接返回结果连语法正确的命令也不会执行。

假如redis事务中出现了运行时错误,那么redis会忽略运行错误的redis命令,继续执行出错命令之后的命令。

最新文章

  1. 基于vitamio的网络电视直播源码
  2. js对象定义
  3. [充电][库]Zlib文件压缩和解压
  4. UVALive 7270 Osu! Master (阅读理解题)
  5. Markdown使用记录
  6. Oracle EBS-SQL (GL-4):从接收追溯到接收事务
  7. javascript学习(10)——[知识储备]链式调用
  8. ELK:logstash和filebeat6.0及以上版本的配置
  9. Flow Problem
  10. Java入门(三):变量和运算符
  11. Linux C++ TCP Socket通信实例
  12. Daily record-September
  13. 监听发现局域网dropbox客户端broadcast-dropbox-listener
  14. 关于.htaccess的设置
  15. Python3 tkinter基础 Canvas create_text 在画布上添加文字
  16. 进阶ES6 点滴认知
  17. Java抽象类应用—模板方法模式
  18. C#基础学习之StreamReader和StreamWriter
  19. pylot 学习笔记
  20. BZOJ 1579--道路升级(DP&最短路)

热门文章

  1. 20145310 《Java程序设计》第8周学习总结
  2. C++之STL迭代器(iterator)
  3. Finder Quick Menu FAQ
  4. POJ-2479 Maximum sum(动态规划)
  5. python 使用set对list去重,并保持list原来顺序
  6. JavaScript高级程序设计-读书笔记(4)
  7. hiho#1080 更为复杂的买卖房屋姿势 线段树+区间更新
  8. jQuery实际案例④——360导航图片效果
  9. Location对象常用知识
  10. git 的日常使用命令