Redis事务
Redis中的事务是指提供一种将多个命令打包到一起,一次性按照顺序执行的机制。Redis在执行事务期间,不会接收处理其他操作命令。
Redis事务有以下局限性
- 无回滚机制:如果某个命令执行失败,不会影响其他命令的执行,因此Redis的事务无法回滚,可能会出现部分成功,部分失败的情况,需结合WATCH命令完成乐观锁机制。
- 无法中断:事务执行(EXEC)期间,队列中的命令会一次执行,某个命令失败不会中断其他命令的执行
- 长耗时命令:事务执行期间会阻塞其他请求,因此要避免长耗时的命令,如keys *,
相关命令
- multi
开启事务,后续命令进入队列,等待EXEC提交后执行 - exec
提交事务,开始执行队列中的所有命令 - discard
回滚事务,清空队列中的命令,并取消MULTI模式 - watch key
监控指定键,如果事务提交前键被修改,事务失败。所有命令都不会执行成功 - unwatch
取消当前客户端对所有键的监控
结合WATCH实现乐观锁控制
- watch关键的key
- 开启事务
- 执行业务操作逻辑
- multi + 命令 + exec 提交事务
- 若监听的key在事务提交前被修改,则exec执行后会返回nil,业务方可以尝试重试来实现乐观锁功能。