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

Redis 如何实现事务呢?

  • 开启一个队列
  • 让命令进入队列
  • 执行事务
# 1 开启事务
multi

# 2 输入命令
set k1 v1
set k2 v2
get k2
set k2 v3
get k2

# 3 执行/放弃事务 (如果任何命令输错了,所有命令就不会执行,并且放弃事务!)
exec 或者 discard

# Redis不保证原子性,如果命令输入正确,但是程序运行期出错(比如数据库只允许存入数字,但你插入了字符),其余的正常代码依旧正常执行!

Redis 乐观锁 watch操作

# watch 就是乐观锁
watch Key

# 先创建一个key money = 100
set money 100

# 线程1 操作:开启事务,并设置money为80 但不执行事务
multi
set money 80

# 线程2 操作:读取money 设置money 为120
get money
set money 120

# 线程1 执行事务
exec

# 一个线程 watch 并执行事务 失败时,一定要unwatch
unwatch

最后的结果是nil ,说明乐观锁生效了!

原理分析:

一个事务执行操作时:被另一个线程修改了相关的内容,就会导致乐观锁执行!