修改redis key的value_Redis#3——Redis事务

Redis事务

Redis事务通过队列存储需要的操作,然后一次性执行完毕,不允许被打断。(但是允许出错,这点与大部分数据库不同)

Redis事务基本操作

  • 开启事务 指令:multi作用:设定事务的开启为止,此指令执行后,后续的所有指令均加入到事务中
  • 执行事务 指令:exec作用:设定事务的结束位置,同时执行事务。与multi成对出现,成对使用
  • 取消事务 指令:discard作用:终止当前事务,发生在multi之后,exec之前

?:加入事务的命令暂时进入到任务队列中,并没有立即执行,只有执行exec命令才开始执行

db25dc91f5403eec5ab943ab4793fbc1.png
事务工作流程

事务的注意事项

  • 定义事务过程中,命令格式输入错误语法错误:指令书写格式有误 **处理结果:**如果定义的事务所包含的命令存在语法错误,整体事务中所有命令均不会执行,包括语法正确的命令
  • 定义事务的过程中,命令执行出现错误**运行错误:**命令格式正确,但是无法正确的执行。**处理结果:**能够正确运行的命令会执行,运行错误的命令不会被执行(这点与MySQL有所不同,Redis保证整体执行不会被打断,类似于锁的情况)

Redis执行完的命令不会自动回滚,需要程序员自己的问题。这个问题不应该出现在线上环境中!出现了就是程序员业务代码的问题。

手动进行事务回滚

  • 记录操作过程中被影响的数据之前的状态
    • 单数据:string
    • 多数据:hash、list、set、zset
  • 设置指令恢复所有被修改的项
    • 单数据:直接set
    • 多数据:修改对应值或整体克隆复制

Redis中的锁

Redis中的锁用于完成事务之间的互斥性

Redis锁的相关操作

  • 对key添加监视锁,在执行exec之前如果key发生了变化,终止事务执行。如果多个获取监视锁的只有第一个能执行(让别人不能用)

    watch key1 [key2...]
  • 取消对所有key的监视

    unwatch
  • 设置公共锁(如果获取失败则阻塞,通过将key del来删除锁)

    setnx lock-key value

    # 可以使用expire为锁添加时间限定,到时不释放放弃锁
    expire lock-key second
    pexpire lock-key milliseconds
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值