• redis:事务与锁


    事务

    Redis事务是指将多条命令加入队列,一次批量执行多条命令,每条命令会按顺序执行,事务执行过程中不会受客户端传入的命令请求影响

    相关命令

    • MULTI:标识一个事务的开启,即开启事务;
    • EXEC:执行事务中的所有命令,即提交;
    • DISCARD:放弃事务;和回滚不一样,Redis事务不支持回滚。
    • WATCH:监视Key改变,用于实现乐观锁。如果监视的Key的值改变,事务最终会执行失败。
    • UNWATCH:放弃监视。

    Redis事务和关系型数据库的事务不太一样,它不保证原子性,也没有隔离级别的概念

    当事务开启时,事务期间的命令并没有执行,而是加入队列,只有执行EXEC命令时,事务中的命令才会按照顺序一一执行,从而事务间就不会导致数据脏读、不可重复读、幻读的问题,因此就没有隔离级别

    在通过EXEC执行事务时,其中命令执行失败不会影响到其他命令的执行,并没有保证同时成功和同时失败的原子操作

    乐观锁:就是非常乐观,做什么事都往好处想; 对于数据库操作,就认为每次操作数据的时候都认为别的操作不会修改,所以不会加锁,而是通过一个类似于版本的字段来标识该数据是否修改过,在执行本次操作前先判断是否修改过,如果修改过就放弃本次操作重新再来;

    悲观锁:就是非常悲观,做什么事都觉得不好;对于数据库操作,每次操作数据数据都会认为别的操作会修改当前数据,说以都要对其进行加锁,类似于表锁和行锁。

    Redis中也有锁机制,但是它是一种乐观锁,不同于MySQL,MySQL中的锁是悲观锁

    Redis中可以使用watch来监视一个目标,如果执行事务之前被监视目标发生了修改,则取消本次事务

    三种方式可以取消监视

    • 事务执行之后,不管是否执行成功还好是失败,都会取消对应的监视;
    • 当监视的客户端断开连接时,也会取消监视;
    • 可以手动UNWATCH取消所有Key的监视;

  • 相关阅读:
    linux设置ssh免密登录
    程序员的领域壁垒——时间片
    初步了解Nacos
    树莓派忘记密码重置密码的方法
    SpringBoot--获取路径中的参数(x-www-form-urlencoded)--方法/实例
    WINUI——Trigger(触发器)使用小结
    【遥感图像:信息增强】
    【WINDOWS / DOS 批处理】关于标签的执行流程
    原生m1/m2 Sketch v90 for Mac最新中文版Sketch已更新,已解决闪退打不开问题
    Java实现图片转文字!(OCR实现)
  • 原文地址:https://blog.csdn.net/weixin_51992178/article/details/128056863