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使用

最新文章

  1. Linux学习笔记2_mysql安装
  2. PYTHON学习总结
  3. web cookie and session
  4. 分享一下学习css,js心得
  5. JSP-07-使用JavaBean封装数据
  6. 通过ulimit改善linux系统性能(摘自IBM)
  7. 2015年ACM长春区域赛比赛感悟
  8. Java定时器小实例
  9. Elasticsearch系列(2):安装Elasticsearch(Linux环境)
  10. 洛谷P4606 [SDOI2018]战略游戏 [广义圆方树]
  11. Clion pycharm激活码(可使用到2019年2月)
  12. virtualbox+vagrant学习-1-环境安装及vagrantfile的简单配置-Mac系统
  13. win10:如何开启自带虚拟机
  14. 虚幻4引擎角色蓝图Character的Movement组件学习
  15. [luogu T71973]卡常者π酱
  16. bzoj 1565 [NOI2009]植物大战僵尸 解题报告
  17. 通过.properties配置文件,在Service层获取值
  18. error:将字符串转换为 uniqueidentifier 时失败
  19. asp 中创建日志打印文件夹
  20. PIE SDK过滤控制

热门文章

  1. ES6躬行记(24)——代理和反射
  2. python 面向对象八 多继承
  3. bzoj 4815: [Cqoi2017]小Q的表格【欧拉函数+分块】
  4. web项目tomcat启动url自定义(去掉项目名)
  5. jQuery 动作效果
  6. BP神经网络算法改进
  7. 01背包 Codeforces Round #267 (Div. 2) C. George and Job
  8. 专 linux命令之set x详解
  9. [转]Visual F# Samples and Walkthroughs
  10. 使用Dotfuscator保护.NET DLL加密DLL,防止DLL反编译