IT袋

当前位置:主页 > 经验教程 > 建站编程 >

如何保证缓存与数据库的双写一致性

如何保证缓存与数据库的双写一致性(4)

时间:2023-11-22 12:47:18 来源:IT袋 作者:马勇
导读:如何保证缓存与数据库的双写一致性,2.1. 分布式锁优化 思考:一般什么情况下数据才会进行缓存? 答案:读多写少数据才会进行缓存 所以我们可以使用读写锁进行优化分布式锁: 共享锁 :读锁

如何保证缓存与数据库的双写一致性

如何保证缓存与数据库的双写一致性

2.1. 分布式锁优化

思考:一般什么情况下数据才会进行缓存?

答案:读多写少数据才会进行缓存

所以我们可以使用读写锁进行优化分布式锁:

  • 共享锁:读锁readLock,加锁之后,其他线程可以共享读操作
  • 排他锁:独占锁writeLock也叫,加锁之后,阻塞其他线程读写操作

在读数据的时候我们可以使用共享锁,保证所有线程可以读,但是不可以写。

如何保证缓存与数据库的双写一致性

在写数据的时候我们可以使用排他锁,保证所有线程可以读,但是不可以写

如何保证缓存与数据库的双写一致性

redisson代码实现

  • 读操作
public Item getById(Integer id){
 RReadWriteLock readWriteLock =redissonClient.getReadWriteLock(s:"ITEM_READ_WRITE_LOCK");
 //读之前加读锁,读锁的作用就是等待该Lockkey释放写锁以后再读
 RLock readLock =readWriteLock.readLock();
 try {
  //开锁
  readLock.lock();
  System.out.println("readLock...");
  Item item =(Item)redisTemplate.opsForValue().get("item:"+id);
  if(item !=null){
   return item;|
  }
  //查询业务数据
  item =new Item(id,name:"华为手机",desc:"华为手机",price:5999.00);
  //写入缓存
  redisTemplate.opsForValue().set("item:"+id,item);
  //返回数据
  return item;
 }finally {
  readLock.unlock();
 }
}
  • 写操作
public void updateById(Integer id){
 RReadWriteLock readWriteLock =redissonClient.getReadWriteLock(s:"ITEM_READ_WRITE_LOCK");
 //写之前加写锁,写锁加锁成功,读锁只能等待
 RLock writeLock =readWriteLock.writeLock();
 try {
  //开锁
  writeLock.lock();
  System.out.println("writeLock...");
  //更新业务数据
  Item item =new Item(id,name:"华为手机",desc:"华为手机",price:5299.00);
 try {
  Thread.sleep(millis:10000);
 }catch(InterruptedException e){
  e.printStackTrace();
 }
  //删除缓存
  redisTemplate.delete(key:"item:"+id);
 }finally {
  writeLock.unlock();
 }
}

2.双写一致,最终一致性解决方案

双写一致,最终一致性可能在我们实际使用中用到的最多,解决方案也比较多

异步通知保证数据的最终一致性

异步通知保证数据的最终一致性

相关阅读

  • Ceph分布式存储集群部署详细步骤教程

    Ceph分布式存储集群部署详细步骤教程

    为大家介绍Ceph分布式存储集群部署详细步骤教程的方法内容,相关内容具体如下: Ceph的部署工具: ceph-deploy:官方的部署工具,不再积极维护ceph-deploy。它不支持RHEL8,CentOS 8或更新的操作系

  • 前端模板网站有哪些 关于web制作网站的模板

    前端模板网站有哪些 关于web制作网站的模板

    全面为您解析前端模板网站有哪些和关于web制作网站的模板的内容,接下来分享详细内容。 1.GitHub Desktop 对于新手来说,要记住那么多git命令可能有点困难,建议新手用git可视化工具,会方便

  • 什么是802.11ac WIFI5? 802.11ac最大传输速率

    什么是802.11ac WIFI5? 802.11ac最大传输速率

    今天为大家介绍什么是802.11acIT技巧方面的经验,下面小编为您详细解答 802.11ac,也被称为WiFi 5,是无线局域网(WLAN)的一种标准,旨在提供更快的数据传输速度和更好的性能。该标准于2013年

  • 中间件解析:概念、类型与实际应用全面探讨

    中间件解析:概念、类型与实际应用全面探讨

    为网友们详解中间件解析的教程内容,一起来看看吧! 一、什么是中间件 在软件开发领域,中间件(Middleware)是一种位于操作系统和应用程序之间的软件,它为应用程序提供了一种统一的、