<Redis> 入门三 事务
2024-08-30 18:33:46
Redis事务是什么
1.可以一次执行多个命令,本质是一组命令的集合。
2.一个事务中的所有命令都会被序列化,按顺序串行化执行而不会被其他命令插入,不许加塞。
意味着redis在事务执行的过程中,不允许另一个客户端发出请求,保证了隔离性。
3.在一个redis事务中,不能保证原子性,下面案例会说明。
Redis事务可以做什么
一个队列中,一次性,按顺序,排他的执行一组命令
Redis事务命令
怎么使用
1.multi,exec简单的使用
multi : 开启事务
每次输入命令不会马上执行,而是返回queued,表示命令已给服务器接收并且暂时保存起来
exec : 执行事务
2.出现错误的情况
2.1 运行错误
首先插入了string 类型的 key 为 k1 的数据,之后又插入了 set 类型的 key为 k1 的数据,
那么在这组命令执行前,redis是无法发现这种非语法错误的
调用exec后,redis执行,会报出错误信息,但是正确的语句依然会被执行。
所以可以看出,事务的操作不是原子性的(要么都成功,要么都失败)
2.2 语法错误
在插入的时侯,语法发生错误,redis会检测出来
当执行exec时,所有的操作都会被取消
所有语法错误的时侯,redis是满足原子性的
Redis事务不支持回滚功能,需要使用者自己收拾烂摊子
3.watch的使用
一旦其中有一个键被修改(或删除),之后的事务就不会执行。
监控一直持续到exec命令(事务中的命令是在exec之后才执行的,所以在multi命令后可以修改watch监控的键值)。
3.1 在multi前改变数值
先设置了 no1 的值为 10,调用watch 监控 no1
在事务执行前,修改了no1的值
执行事务,发现事务执行失败
3.2 在multi中改变值
在事务外监控av的值,开启事务multi
改变监控的值,并设置新值,事务执行成功
可以看出multi后改变监控的值是可以的,因为执行了exec后,watch就失效了
3.3 再举个例子
4.discard使用
最新文章
- Linux学习笔记2_mysql安装
- PYTHON学习总结
- web cookie and session
- 分享一下学习css,js心得
- JSP-07-使用JavaBean封装数据
- 通过ulimit改善linux系统性能(摘自IBM)
- 2015年ACM长春区域赛比赛感悟
- Java定时器小实例
- Elasticsearch系列(2):安装Elasticsearch(Linux环境)
- 洛谷P4606 [SDOI2018]战略游戏 [广义圆方树]
- Clion pycharm激活码(可使用到2019年2月)
- virtualbox+vagrant学习-1-环境安装及vagrantfile的简单配置-Mac系统
- win10:如何开启自带虚拟机
- 虚幻4引擎角色蓝图Character的Movement组件学习
- [luogu T71973]卡常者π酱
- bzoj 1565 [NOI2009]植物大战僵尸 解题报告
- 通过.properties配置文件,在Service层获取值
- error:将字符串转换为 uniqueidentifier 时失败
- asp 中创建日志打印文件夹
- PIE SDK过滤控制
热门文章
- ES6躬行记(24)——代理和反射
- python 面向对象八 多继承
- bzoj 4815: [Cqoi2017]小Q的表格【欧拉函数+分块】
- web项目tomcat启动url自定义(去掉项目名)
- jQuery 动作效果
- BP神经网络算法改进
- 01背包 Codeforces Round #267 (Div. 2) C. George and Job
- 专 linux命令之set x详解
- [转]Visual F# Samples and Walkthroughs
- 使用Dotfuscator保护.NET DLL加密DLL,防止DLL反编译