redis事务浅析
事务可以简单理解为:把多件事当做一件事情处理,要么一起成功,要么一起失败。在Spring中可以配置一个事务管理器,然后在要进行事务处理的方法上添加@Transactional
注解就可以了。
对于redis事务,无外乎如此,有时候为了同时处理多个结构,会向redis发送多个redis命令。使用redis事务可以保证一个客户端在不被其他客户端打断的情况下执行多个redis命令。
对于redis事务,我会从以下方面介绍:
- 什么是Redis的事务
- redis事务涉及的命令与用法
- 如何实现redis事务
什么是redis事务
redis中的事务是一组redis命令的集合,开启redis事务后,这组redis命令会当做一个原子操作被redis执行。
通过将一个个redis命令发送给redis,再由redis执行这些命令。发送给redis的这组命令并不会立即执行,只有当客户端通知redis可以执行了才会开始执行并将执行结果返回客户端。
与关系数据库中可以回滚的事务不同在于,redis事务中被MULTI
和EXEC
包裹的命令会一个接一个地执行,直到所有命令都执行完毕。当一个事务处理完毕,才会处理另一个客户端的命令。
也就是说,redis事务是针对一个客户端而言的,所以在redis分片部署模式下是不能处理事务的。
redis事务命令与用法
包括MULTI
、EXEC
、WATCH
、UNWATCH
和DISCARD
。
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命令,继续执行出错命令之后的命令。
最新文章
- 基于vitamio的网络电视直播源码
- js对象定义
- [充电][库]Zlib文件压缩和解压
- UVALive 7270	Osu! Master (阅读理解题)
- Markdown使用记录
- Oracle EBS-SQL (GL-4):从接收追溯到接收事务
- javascript学习(10)——[知识储备]链式调用
- ELK:logstash和filebeat6.0及以上版本的配置
- Flow Problem
- Java入门(三):变量和运算符
- Linux C++ TCP Socket通信实例
- Daily record-September
- 监听发现局域网dropbox客户端broadcast-dropbox-listener
- 关于.htaccess的设置
- Python3 tkinter基础 Canvas create_text 在画布上添加文字
- 进阶ES6 点滴认知
- Java抽象类应用—模板方法模式
- C#基础学习之StreamReader和StreamWriter
- pylot 学习笔记
- BZOJ 1579--道路升级(DP&;最短路)