首页 > 其他分享 >guava 缓存刷新 代码记录 刷新缓存,未完成代码

guava 缓存刷新 代码记录 刷新缓存,未完成代码

时间:2023-10-27 18:14:26浏览次数:31  
标签:info 缓存 log 代码 static key 刷新 String

private static AtomicBoolean refreshCaching = new AtomicBoolean(false);
    private static LoadingCache<String, String> cache1 = CacheBuilder.newBuilder()
            .maximumSize(1000)
            .expireAfterWrite(10, TimeUnit.MINUTES)
            .removalListener((rn)->{log.info("remove:{}", rn);})
            .build(new TestCache());
    public static void main(String[] args) {


        List<String> test1 = new ArrayList<>();
        for (int i = 0; i < 1000; i++) {
            test1.add("zmm"+i);
        }
        for (String s : test1) {
            try {
                String result = getCache(s);
                log.info("成功获取缓存key:{},value:{}", s, result);
            } catch (Exception ex) {
                throw new RuntimeException(ex);
            }
        }

        long l = System.currentTimeMillis();
        ConcurrentMap<String, String> map = cache1.asMap();
        boolean refreshing = refreshCaching.compareAndSet(false, true);
        if (!refreshing){
            map.keySet().forEach(item ->map.remove(item));
            refreshCaching.set(false);
        }else{
            log.error("正在刷新,请等待");
        }
        long l1 = System.currentTimeMillis() - l;
        log.info("刷新缓存耗时:{}", l1);
    }

    private static String getCache (String key)throws Exception{
        while (true){
            if (!refreshCaching.get()){
                return cache1.get(key);
            }
            log.info("缓存刷新中,自旋等待");
            Thread.sleep(100);
        }
    }

    public static class TestCache extends CacheLoader<String, String> {
        @Override
        public String load(String key) throws Exception {
            log.info("从数据库获取缓存:{}", key);
            return "1";
        }
    }

 

标签:info,缓存,log,代码,static,key,刷新,String
From: https://www.cnblogs.com/loveCrane/p/17792922.html

相关文章

  • 分布式【缓存】
    一、简介    分布式缓存:在分布式环境或系统下,把一些热门数据存储到离用户近、离应用近的位置,并尽量存储到更快的设备,以减少远程数据传输的延迟,让用户和应用可以很快访问到想要的数据。二、Redis持久化    RDB、AOF三、Redis主从四、Memcached分布式缓存原理......
  • 行行AI公开课:飞书无代码平台AI技术负责人邓范鑫——从第一性原理看大模型Agent技术
    当我们进入智能时代,开始思考:什么将会成为这个时代的核心载体?是App?是网站?还是Agent?也许几年后的现实才能给出答案,但历史告诉我们一个新鲜事物的演进总会找到一个稳定的术语来概括这个载体,而今天我们看到Agent最具有这个潜力。几个月前,OpenAI在内部就开始高度关注智能体(Agent)领......
  • 五款最热低代码平台推荐!
    一、什么是低代码平台?首先,什么是低代码平台?低代码平台是通过少量代码或无需编码就可以快速实现应用程序的开发平台。它为编程提供图形用户界面,从而以极快的速度开发代码,减少传统编程工作。低代码平台有助于快速开发代码,最大限度地减少手工编码的工作量。这些平台不仅有助于编码,......
  • Django和Vue.js是两种不同的框架,它们各自有自己的特点和用途¹。 **Django**¹: - Dja
    Django和Vue.js是两种不同的框架,它们各自有自己的特点和用途¹。**Django**¹:-Django是一个开放源代码的PythonWeb应用框架¹。-它采用了MTV(模型,视图,模板)的软件设计模式¹。-Django可以方便、快捷地创建高品质、易维护、数据库驱动的应用程序¹。-Django还包含许多功能......
  • 第四章苏格拉底问答、实践过程截图、遇到问题解决问题截图,代码链接
    代码#include<stdio.h>#include<stdlib.h>#include<pthread.h>#defineN4intA[N][N],sum[N];void*func(voidarg){intj,row;pthread_ttid=pthread_self();row=(int)arg;printf("Thread%d[%lu]computessumofrow%d\n"......
  • 易语言银行电子回执单生成器,转账对公都可以,程序集代码分享
    今天闲着没事用易语言的画板设计了一个回执单生成器,程序我就不分享了,然后源码我会分享代这里,仅供娱乐哈,装逼用的,用到的工具还是用易语言,毕竟我易语言学了10多年,需要的组件是:画板,编辑框,普通按钮,标签,主要就这些,下面看下我设计的UI界面。UI设计好的截图: 程序集源码分享:【你可以一......
  • Google Test 示例代码
    TODO:全局环境和监听事件在运行过程中的顺序。https://gitee.com/boluanace/googletest/blob/master/googletest/test/googletest-listener-test.cc参考资料https://github.com/google/googletest/tree/main/googletest/test未完待续......未经作者授权,禁止转载THEEND......
  • 攻克数字--魔方罗盘的商品榜单数据生成python代码
    ①先配置,方法同数据解析入库(https://www.cnblogs.com/gkdata/p/17792339.html)②生成python代码importsyssys.path.append(r'D:\安装包\GKData\ApiConfig')importGkGk.Guid2DB_Path=r'"D:\安装包\GKData\3rdLibs\Guid2DB.exe"'_headers_dict......
  • 多线程程序是如何执行代码的?
    进程与线程概念、区别、以及线程间的通信概念进程是对程序运行时的封装,是操作系统分配资源的基本单位,实现操作系统的并发。线程是进程的子单位,是CPU调度和分派的基本单位,实现进程内部的并发。是OS识别的最小执行与调度单位,每个线程独占一个虚拟处理器,每个线程完成不同的任务,但......
  • pytorch(11.2) Transformer 代码
         ......