首页 > 其他分享 >并发场景下,缓存失效处理场景

并发场景下,缓存失效处理场景

时间:2024-08-13 19:49:01浏览次数:17  
标签:缓存 java cache 并发 场景 key

并发场景下,缓存失效,需要从数据库或下游查询缓存中的数据。

若并发流量都请求到下游,导致下游压力较大,可通过如下方式进行处理:

import java.util.concurrent.*;

public class SingleFlight {
  private final ConcurrentMap<Object, CompletableFuture<?>> cache = new ConcurrentHashMap<>();

  public <V> V execute(Object key, Callable<V> callable) throws Exception {
      CompletableFuture<?> future = cache.computeIfAbsent(key, k -> CompletableFuture.supplyAsync(() -> {
          // 查询数据库或下游服务
          try {
              return callable.call();
          } catch (Exception e) {
              throw new RuntimeException(e);
          }
      }).whenComplete((v, e) -> cache.remove(key)));

      return (V) future.get();
  }
}

  https://github.com/phicode/philib/blob/master/src/main/java/ch/bind/philib/concurrent/SingleFlight.java

标签:缓存,java,cache,并发,场景,key
From: https://www.cnblogs.com/javaXRG/p/18357595

相关文章

  • pbootcms模板自动清理runtime缓存
    打开/apps/home/controller/ExtLabelController.php文件找到  //测试扩展单个标签  privatefunctiontest()  {    $this->content=str_replace('{pboot:userip}',get_user_ip(),$this->content);  }}在它下面加入//自动会话清理脚本publicfunc......
  • Spring Boot 缓存优化攻略
    1.确定待缓存的对象首先,我们需要明确哪些对象最适合缓存。一般而言,那些代价高昂且耗时的操作的结果需要优先考虑,例如数据库查询、网络服务调用或复杂计算的结果。然而,定义一些理想缓存候选对象的通用特征将更重要。这些特征有助于我们在应用程序中识别适合缓存的对象:频繁访......
  • 什么是缓存击穿、缓存穿透、缓存雪崩?
    1.缓存击穿(CacheBreakdown)定义:缓存击穿指的是缓存中某个热点数据在过期或被删除后,突然失效,导致大量请求同时到达数据库。由于热点数据的缓存失效,这些请求会同时直接访问数据库,导致数据库负载急剧增加。具体场景:假设一个电商平台的一个热销商品的库存信息被缓存了。......
  • 自动驾驶系列—智能驾驶新时代:解密APA车位检测系统背后的技术与应用场景
    ......
  • windwos清理图标缓存
    有的时候桌面图标突然就没了,可以采用下面bat命令进行清理rem关闭Windows外壳程序explorertaskkill/f/imexplorer.exerem清理系统图标缓存数据库attrib-h-s-r"%userprofile%\AppData\Local\IconCache.db"del/f"%userprofile%\AppData\Local\IconCache.db"a......
  • 【架构师视角系列】风控场景下的配置中心设计思考
    声明原创文章,转载请标注。https://www.cnblogs.com/boycelee/p/18055933《码头工人的一千零一夜》是一位专注于技术干货分享的博主,追随博主的文章,你将深入了解业界最新的技术趋势,以及在Java开发和安全领域的实用经验分享。无论你是开发人员还是对逆向工程感兴趣的爱好者,都能在《......
  • [场景设计]超卖问题
    如果扣减库存的操作在一台机器上使用本地锁JVM锁不和数据库交互,模拟库存扣减。并发测试100个线程,访问50次。privatevoidjvmLock(){  lock.lock();  try{    goods.setInventory(goods.getInventory()-1);    log.info(goods.getInventor......
  • TensorFlow简介,应用场景,使用方法以及项目实践及案例分析,附带源代码
    一、TensorFlow简介TensorFlow是由GoogleBrain团队开发的开源机器学习库,广泛用于各种复杂的数学计算,特别是涉及深度学习的计算。它提供了丰富的工具和资源,用于构建和训练机器学习模型。TensorFlow的核心是计算图(ComputationGraph),这是一种用于表示计算流程的图结构,由节点(代表......
  • Apache Doris设计思想介绍与应用场景
    ApacheDoris设计思想介绍与应用场景   MPP(MassivelyParallelProcessing),即大规模并行处理,在数据库非共享集群中,每个节点都有独立的磁盘存储系统和内存系统,业务数据根据数据库模型和应用特点划分到各个节点上,每台数据节点通过专用网络或者商业通用网络互相连接,彼此协同......
  • DEVCON初级使用教程结构,你可以根据自己的需求深入学习每个部分。深入了解 DEVCON 的中
    DEVCON(DeviceConsole)是一个用于管理Windows设备驱动程序和设备的命令行工具。它提供了一个用于列出、启用、禁用、安装、卸载和更新设备驱动程序的接口。以下是一个DEVCON初级使用教程的大纲,帮助你了解如何开始使用这个工具。DEVCON初级使用教程大纲1. 介绍什么是DEVCON?......