首页 > 其他 > 详细

Redis(9)—事务

时间:2020-06-02 17:33:47      阅读:44      评论:0      收藏:0      [点我收藏+]

Redis(9)—事务

Redis事务

Redis 事务本质:一组命令的集合。

一个事务中的所有命令,在事务执行过程的中,会按照顺序执行。

Redis 事务特性:一次性、顺序性、排他性。

Redis事务没有没有隔离级别的概念。

Redis事务不保证原子性。

所有的命令在事务中,并没有直接被执行,只有发起执行命令的时候才会执行。

正常执行事务

# 1.multi : 开启事务
multi

# 2.命令入队
set k1 v1
set k2 v2
get k2
set k3 v3

# 3.exec : 执行事务
exec

放弃事务

# discard : 放弃事务
discard

编译型异常

命令有错 ,事务中所有的命令都不会被执行!

multi 
set k1 v1 
set k2 v2 
set k3 v3 
getset k3 ? ?# 错误的命令 
set k4 v4 
set k5 v5 
exec ?# 执行事务报错!所有的命令都不会被执行!

运行时异常

类似1/0,那么执行命令的时候,其他命令是可以正常执行的,错误命令抛出异常!

set k1 "v1" 
multi 
incr k1 ?# 会执行的时候失败! 
set k2 v2 
set k3 v3 
get k3 
exec ?# 虽然第一条命令报错了,但是依旧正常执行成功了! 

watch 监控,乐观锁

  1. 悲观锁: 很悲观,认为什么时候都会出问题,无论做什么都会加锁。

  2. 乐观锁: 很乐观,认为什么时候都不会出问题,所以不会上锁。 更新数据的时候去判断一下,在此期间是否 有人修改过这个数据, 获取version 更新的时候比较 version。

set money 100
set out 0
watch money #监控
multi
decrby money 20
incrby by out 20
exec #执行之前如果另外一个线程修改了监控的值,这个时候,就会导致事务执行失败!
#事务执行失败后,先解锁 unwatch ,再重新watch监视。 

Redis(9)—事务

原文:https://www.cnblogs.com/yinrz/p/13031182.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!