0
点赞
收藏
分享

微信扫一扫

二叉树 经典例题

瑾谋 2024-01-03 阅读 11

文章目录

Redis双写一致性

在这里插入图片描述

1. 延迟双删(有脏数据风险)

  1. 先删缓存,还是先删数据库?
    无论先删缓存还是先删数据库,在多线程情况下都可能导致缓存脏数据的可能。
  2. 延迟双删(有脏数据风险)
    在这里插入图片描述
  • 读操作:缓存命中,直接返回;缓存未命中查询数据库,写入缓存,设定超时时间
  • 写操作:延迟双删
    删除两次缓存,是为了减少缓存脏数据的可能性
    存在的问题:延迟的时间不好控制

2. 异步通知(保证数据最终一致性)

  • 基于MQ异步通知
    在这里插入图片描述
  • 基于Canal异步通知
    在这里插入图片描述

3. 分布式锁(数据的强一致,性能低)

读多写少情况下可以使用分布式锁,能保证数据的强一致性,但是性能比较低

实现:
共享锁:读锁readLock,加锁之后,其他线程可以共享读操作(用在查询数据方法里面)
排他锁:独占锁writeLock,加锁之后,阻塞其他线程读写操作(用在更新数据方法里面)
使用Redisson来实现,对同一把锁分别使用readLock,writeLock。

RReadWriteLock readWriteLock = redissonClient.getReadWriteLock("ITEM_READ_WRITE_LOCK");
//在更新数据的方法里面使用writeLock
readWriteLock.writeLock();
//在查询的方法使用readLock
readWriteLock.readLock();
举报

相关推荐

0 条评论