怎么保证Mysql的主从一致性

根据一致性有低到高,Mysql分为异步复制、半同步复制、组复制。异步复制是将binlog文件发送给从节点就不管了,半同步复制是只要有一个从节点告知主节点已经将binlog复制完毕,主节点就返回插入完成的消息,组复制就需要大多数节点都告知主节点复制完毕,主节点才会返回。

如何使用redis实现分布式锁

1
SET lock_key unique_value NX PX 30000
  • lock_key:锁的名字。
  • unique_value关键点! 每个客户端生成的随机唯一 ID(如 UUID)。用于释放锁时校验“这把锁是不是我加的”。
  • NX:只有 key 不存在时才设置成功(保证互斥)。
  • PX 30000:设置 30 秒自动过期(防止客户端崩溃后锁永不释放)。

可能涉及的一些问题:

  1. 业务流程比较久,锁超时误删。解决:删之间看一下是不是本地线程持有锁
  2. 解锁的原子性需要保证

spring事务的原理

spring事务是基于事务管理器与aop实现的。

具体来说,项目启动时,如果该方法有@transctional注解,spring在创建该类的bean时会创建一个代理对象存入ioc容器中,当方法被调用时,从事务管理器拿到一个连接,将连接改为手动提交,如果业务抛出异常,则回滚。