首页 Redis事务
文章
取消

Redis事务

抛弃认知

Redis事务机制不具备sql数据的undo、redo日志操作,不能保证事务的原子性

A成功了,B执行时宕机,表现即为A成功,B失败

Redis事务机制(批处理执行)

为了避免命令被插队

Redis是异步单线程执行,一个线程即对应所有的客户端,哪个客户端上传了命令,线程就会执行,所以不能保证一个客户端的多个命令,不会被其他客户端的命令插队。

只能保证ACID属性里的一致性和隔离性

一致性(保证命令串行执行)

开启事务前要用WATCH命令监视要操作的记录

1
WATCH key1 key2 ...

开启事务

1
2
3
MULTI
...
EXEC
  • 开启事务后所有的操作都不会立即执行,只有等到EXEC命令的时候才会批处理执行
  • 只有对应记录 watch后exec前 没有被修改过,才能执行成功
  • exec后没有提示则为失败

取消事务

1
2
3
MULTI
...
DISCARD
  • 只是清空缓存内的批处理命令
  • 事务没exec前可以撤销,exec后不可撤销
本文由作者按照 CC BY 4.0 进行授权