Redis(9)—事务

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监视。 
posted @ 2020-06-02 14:49  Baby丿太依赖  阅读(134)  评论(0)    收藏  举报