查漏补缺
六月10日
@1.cache-aside模式先改DB在删redis
正常情况下可以保证数据一致性
1.A改DB
2.A删缓存
3.B读新数据同时更新缓存
但是还有一个问题就是当1完成了B就去读数据了拿到的还是脏数据但是这个窗口很小
兜底方案是redis canal去监听binlog异步兜底(这个也待升级)
@2.分布式锁
如果不用lua脚本的话去解除锁可能会解除别人的锁
1.A拿到所执行业务但是业务慢了锁自动过期了
2.B拿到锁(同一把锁)
3.A执行完后get发现锁还在因为是同一把锁直接把B的锁删了
如果用lua脚本的话就是原子操作
1.拿到value
2.比较value
3.同样就删 不会出现删除别人锁的情况.
但是避免不了同时跑的情况
1.A拿到所执行业务但是业务慢了锁自动过期了
2.B拿到锁(同一把锁)
3.AB一起跑 (并发冲突)
4.A跑完了LUA脚本删除所对比value值不对所以不删
这就引出了自动续期的问题所以Redisson看门狗机制就很好解决了这个问题
准备把分布式锁升级为redisson这样就可以很好解决并发冲突问题了
@3为什么构造注入不能用三级缓存救循环依赖
1.因为用构造注入是先依赖在进三级缓存
2.比如setter注入的话就是先生成一个半成品bean进入三级缓存然后再注入
@mybatis-plus
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); // 原来自动有,现在得手动补
interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); // 这个本来就没有
return interceptor;
}
如果用自动配置的话分页不用写但是乐观锁的显示注册
但是乐观锁注册后分页就也得自己手动写了

浙公网安备 33010602011771号