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

本文共 2256 字,大约阅读时间需要 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值已经被客户端改变,整个事务队列都不会被执行!把最新的数据拿下来,再次执行!

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

转载于:https://www.cnblogs.com/jiqing9006/p/8026783.html

你可能感兴趣的文章
Redis常用命令
查看>>
[转载]电脑小绝技
查看>>
windos系统定时执行批处理文件(bat文件)
查看>>
thinkphp如何实现伪静态
查看>>
BZOJ 2243: [SDOI2011]染色( 树链剖分 )
查看>>
BZOJ 1925: [Sdoi2010]地精部落( dp )
查看>>
c++中的string常用函数用法总结!
查看>>
[DLX精确覆盖+打表] hdu 2518 Dominoes
查看>>
SuperMap iServerJava 6R扩展领域开发及压力测试---判断点在那个面内(1)
查看>>
Week03-面向对象入门
查看>>
一个控制台程序,模拟机器人对话
查看>>
Vue 2.x + Webpack 3.x + Nodejs 多页面项目框架(上篇——纯前端多页面)
查看>>
我的PHP学习之路
查看>>
【题解】luogu p2340 奶牛会展
查看>>
对PostgreSQL的 SPI_prepare 的理解。
查看>>
解决响应式布局下兼容性的问题
查看>>
使用DBCP连接池对连接进行管理
查看>>
【洛谷】【堆+模拟】P2278 操作系统
查看>>
hdu3307 欧拉函数
查看>>
Spring Bean InitializingBean和DisposableBean实例
查看>>