Redis事务

Redis事务的三个阶段

  1. 开启事务
  2. 命令入队列
  3. 执行事务

Redis事务的三个特性

  1. 单独的隔离操作:事务中所有命令会按顺序执行,不会被其他命令打断
  2. 没有隔离级别的概念:在提交之前,任何事物都不会被实际执行。而mysql中,事务提交之前命令就已经执行,mysql根据执行的结果决定是否回滚。
  3. 不保证原子性:事务中有错误的命令,其他命令仍可以执行,不会回滚。

Redis对事务的支持是部分的。

multi:redis事务开启
exce:执行事务

  1. 如果事务中有错误的命令,则所有的命令都不执行
  2. 如果事务中有正确但执行时会出错的命令(例如对String类型执行incr操作),则其他正确的命令可以执行。
MULTI
set k1 v1
set k2 v2
incr k1
EXCE

虽然incr k1命令会报错,但事务可以执行,能添加新值 k1-v1,k2-v2。

MULTI
set k1 v1
set k2 v2
getset k1
EXCE

由于事务中存在错误命令 getset k1 ,因此事务执行失败。

WATCH:监控一个或多个key,如果在事务执行之前这个key被改变,则事务将被打断。类似乐观锁
UNWATCH:取消WATCH命令对所有key的监视。

    WATCH balance
    MULTI
    decrby balance 20
    incrby debt 20
    EXCE

如果在WATCH指令之后到执行事务之前,被监控的balance都没有改变的话,则事务执行成功。如果已知监控变量发生了修改,可以用UNWATCH取消监控。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。