博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
redis事务
阅读量:6859 次
发布时间:2019-06-26

本文共 2287 字,大约阅读时间需要 7 分钟。

是什么

可以一次执行多个命令,本质是一组命令的集合。一个事务中的所有命令都会序列化,不许加塞!

可以一口气攒着,不需要立刻知道结果。但是一定要确保数据的准确性!分红就是这样的!

排好队,一次性的执行多个redis的命令!

能干嘛

一个队列中,一次性的、顺序性的、排他性的执行一系列的命令。要么一起成功,要么一起失败。

怎么玩

通过MULTI指令开启,之后输入多个命令!Redis将它们加入到队列当中,所有的命令通过EXEC来开启执行!

通过DISCARD来放弃本次的批处理操作!

例子:银行转账,要么成功,要么失败。

192.168.1.66:6379> MULTIOK192.168.1.66:6379> set k1 v1QUEUED192.168.1.66:6379> set k2 v2QUEUED192.168.1.66:6379> set k3 v3QUEUED192.168.1.66:6379> set k4 v4QUEUED192.168.1.66:6379> get k2QUEUED192.168.1.66:6379> EXEC1) OK2) OK3) OK4) OK5) "v2"

好比购物先加入购物车,最后EXEC统一结账。

192.168.1.66:6379> MULTIOK192.168.1.66:6379> set k1 11QUEUED192.168.1.66:6379> set k2 22QUEUED192.168.1.66:6379> set k3 33QUEUED192.168.1.66:6379> DISCARDOK192.168.1.66:6379> get k1 "v1"

DISCARD 撤销所有操作!

192.168.1.66:6379> MULTIOK192.168.1.66:6379> set k1 v1QUEUED192.168.1.66:6379> set k2 v2QUEUED192.168.1.66:6379> getset k3(error) ERR wrong number of arguments for 'getset' command192.168.1.66:6379> set k4 v4QUEUED192.168.1.66:6379> EXEC(error) EXECABORT Transaction discarded because of previous errors.

加入时只要有一个出错误,统统的不执行!

周阳语录:年轻的时候,就是练级打怪的时候,勇敢的上!挑战自己!30以前不要怕,30岁以后不要悔!有机会就跳进去干!

192.168.1.66:6379> set k1 1OK192.168.1.66:6379> set k2 2OK192.168.1.66:6379> set k3 3OK192.168.1.66:6379> set k4 4OK192.168.1.66:6379> MULTIOK192.168.1.66:6379> incr k1 QUEUED192.168.1.66:6379> decr k2QUEUED192.168.1.66:6379> EXEC1) (integer) 22) (integer) 1192.168.1.66:6379> get k1"2"192.168.1.66:6379> get k2"1"

k1增加了,k2减小了!通过事物处理,妥妥的不出错!

192.168.1.66:6379> set k1 v1OK192.168.1.66:6379> set k2 v2OK192.168.1.66:6379> set k3 v3OK192.168.1.66:6379> set k4 v4OK192.168.1.66:6379> MULTIOK192.168.1.66:6379> incr k1QUEUED192.168.1.66:6379> set k2 22QUEUED192.168.1.66:6379> set k3 33QUEUED192.168.1.66:6379> set k4 44QUEUED192.168.1.66:6379> get k4QUEUED192.168.1.66:6379> EXEC1) (error) ERR value is not an integer or out of range2) OK3) OK4) OK5) "44"

加入队列时不出错,下面的都将正常运行,执行时出错不影响其他语句!

Watch监控 重要

悲观锁、乐观锁、CAS(check and set)

行锁,表锁,并发性与一致性的对立!表锁,并发性及其差,但是一致性非常好!

工作中,正常用乐观锁!并发性会更好!

悲观锁每次拿数据的时候都会上锁(行锁,表锁)。并发性差!

乐观锁,每次去拿数据不会上锁,但是更新的时候,使用版本号机制。判断一下在此期间别人有没有去更新这个数据。

乐观锁策略:提交版本必须大于记录当前版本才能执行更新。

一旦执行了exec之前加的监控锁都会被取消掉!

Watch指令类似于乐观锁!如果key值已经被客户端改变,整个事务队列都不会被执行!把最新的数据拿下来,再次执行!

开启,入队,执行。(事务的三个阶段)

本文转自TBHacker博客园博客,原文链接:http://www.cnblogs.com/jiqing9006/p/8026783.html,如需转载请自行联系原作者

你可能感兴趣的文章
用js实现的刷新页面
查看>>
我有一个梦想
查看>>
iOS SDK 开发遇到问题集锦
查看>>
Python- You are using pip version 18.1, however version 19.1.1 is available.
查看>>
用java反射将map映射成java对象的简易实现,模拟BeanUtils
查看>>
C Primer Plus 第11章 字符串和字符串函数 11.4 自定义字符串I/O函数
查看>>
JBoss 系列五十五:JBoss 7/WildFly 集群之 HornetQ Messaging - III(示例补充说明)
查看>>
Babel指南 - 基本环境搭建
查看>>
Mybatis常用总结一
查看>>
BSTR详解一 -BSTR简介和内部结构
查看>>
解决利用MWPhotoBrower跳转时的问题
查看>>
link方式安装eclipse插件
查看>>
python3.4 操作SqlServer数据库出现乱码
查看>>
web开发过程中,url中参数有特殊字符导致出现问题
查看>>
Hibernate MySQL Timestamp查询时遇到的转换问题
查看>>
设置class path(Windows)
查看>>
关于Lucene中IndexSearcher,IndexWriter和IndexReader的管理
查看>>
[拼凑、转载]Hadoop面试前要做的准备
查看>>
jfinal-web jfinal下的基础model实现以及数据压缩和缓存及websocket
查看>>
JVM中可生成的最大线程数
查看>>