范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

通过caffeine中的LoadingCache对热点数据的缓存处理

  概述
  本文针对实际业务开发过程中遇到的 热点数据缓存 问题,引入了 caffeine 中的 LoadingCache 对象,并分析了具体的使用场景,最后将使用的完整过程中的关键代码罗列出来,具体内容如下 caffeine 说明和 maven 依赖 使用场景分析 缓存对象的初始化 缓存数据的加载 缓存的使用 caffeine 说明和 maven 依赖caffeine 提供了基于 内存 的缓存机制,没有持久化到磁盘的功能,意味着一旦应用关闭或者重启,内存中的缓冲对象需要全部重新加载 maven 依赖如下:    com.github.ben-manes.caffeine   caffeine   2.8.1  使用场景分析数据存在数据库中,在短期内会大量访问,比如 10qps,减少对数据库的查询,提高响应速度,提高用户体验 数据不会频繁变化,修改后期望 1 s 后缓存中的数据失效 可以限制数据库的访问频率,比如最大每秒一次(只要缓存不失效就不会访问数据库) 需要缓存的数据量不能太大 缓存对象的初始化通过@PostConstruct修饰的方法来初始化缓存对象SwitchCache 通过 @PostConstruct 修饰的方法来初始化缓存对象 通过 expireAfterWrite(1, TimeUnit.SECONDS) 设置缓存写入后 1s 后失效,相当于限制了最多每秒访问一次数据库 package com.ckjava.kqc.kone.cache;  import com.google.common.cache.CacheBuilder; import com.google.common.cache.LoadingCache; import com.ckjava.kqc.kone.model.entity.others.KoneSwicth; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Component;  import javax.annotation.PostConstruct; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit;  /**  * Function: 开关缓存  *  * @author chenkui  * @date 2021/8/19  */ @Component public class SwitchCache {     private static LoadingCache switchCache;      private static final Logger logger = LoggerFactory.getLogger(SwitchCache.class);      @Autowired     private ApplicationContext mApplicationContext;      @PostConstruct     private void init() {         switchCache = CacheBuilder.newBuilder()                 .expireAfterWrite(2, TimeUnit.SECONDS)                 .build(new SwitchLoader(mApplicationContext));     }      public KoneSwicth get(final String switchKey) {         try {             System.out.println(switchCache.stats().toString());             return switchCache.get(switchKey);         } catch (final ExecutionException e) {             logger.error("SwitchCache get has error", e);             return null;         }     } } 通过@Configuration创建 bean 初始化 LoadingCache 对象
  或者配置到 Configuration 中,如下 CacheConfig: 缓冲对象初始化 import java.util.concurrent.TimeUnit;  /**  * Function: 缓存  *  * @author chenkui  * @date 2021/8/19  */  @Configuration public class CacheConfig {      @Bean     @Primary     public LoadingCache switchCache(             final ApplicationContext mApplicationContext) {         return                 CacheBuilder.newBuilder()                         .expireAfterWrite(1, TimeUnit.SECONDS)                         .build(new SwitchCacheLoader(mApplicationContext));     }  } SwitchCacheCom:缓冲方法封装 import com.google.common.cache.LoadingCache; import com.ckjava.kqc.kone.model.entity.others.KoneSwicth; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component;  /**  * Function: 开关缓存  *  * @author chenkui  * @date 2021/8/19  */ @Component public class SwitchCacheCom {     private static final Logger logger = LoggerFactory.getLogger(SwitchCacheCom.class);     @Autowired     private LoadingCache switchCache;      public KoneSwicth get(final String switchKey) {         try {             final KoneSwicth koneSwicth = switchCache.get(switchKey);             logger.info(switchCache.stats().toString());             return koneSwicth;         } catch (final Exception e) {             logger.error("SwitchCache get has error", e);             return null;         }     } } 缓存数据的加载SwitchLoader:用于在缓存中的数据失效后,再从数据库中获取,并自动存储到缓存中 package com.ckjava.kqc.kone.cache;  import com.google.common.cache.CacheLoader; import com.ckjava.kqc.kone.dao.others.KoneSwicthMapper; import com.ckjava.kqc.kone.model.entity.others.KoneSwicth; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.ApplicationContext;  /**  * Function: switch 加载  *  * @author 执剑  * @date 2021/8/19  */ public class SwitchLoader extends CacheLoader {     private static final Logger logger = LoggerFactory.getLogger(SwitchLoader.class);      private final KoneSwicthMapper mKoneSwicthMapper;      public SwitchLoader(final ApplicationContext applicationContext) {         mKoneSwicthMapper = applicationContext.getBean(KoneSwicthMapper.class);     }      @Override     public KoneSwicth load(final String switchKey) {         logger.info("loading from db");         return mKoneSwicthMapper.findByUniq(KoneSwicth.builder().switchKey(switchKey).build());     } } 缓存的使用SwitchController:通过接口请求的时候直接使用缓存对象 import com.ckjava.kqc.kone.annotation.KoneResponseResult; import com.ckjava.kqc.kone.cache.SwitchCacheCom; import com.ckjava.kqc.kone.config.pattern.ApiPatterns; import com.ckjava.kqc.kone.model.entity.others.KoneSwicth; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController;  /**  * @author chenkui  * @date 10:39 2021/8/19  */ @Api(tags = "系统开关") @RestController @RequestMapping(value = ApiPatterns.PREFIX + "/switch") public class SwitchController {      @Autowired     private SwitchCacheCom mSwitchCache;      /**      * 返回业务线列表      */     @ApiOperation(value = "获取开关")     @KoneResponseResult("获取开关!")     @GetMapping()     public KoneSwicth getSwitch(             @RequestParam final String switchKey) {         return mSwitchCache.get(switchKey);     } }

手机功能优先级,你怎么排?大家买手机,经常会遇到,机型琳琅满目,参数眼花缭乱,如何选择成了一个难题,尤其是一些选择困难症的人,大家因为性别工作习惯行为不同,选择也不同。所以对CPU性能(内存,闪存,网络,信苹果宣布减产SE3,但被我们调侃为智商机的SE3却在日本卖爆了多方面消息证实,因为芯片短缺以及能源供应不足,所以苹果官方将减产三月份发布的SE3产量。说一下这个SE3,作为SE系列的第三部手机,这部手机可以说是换汤不换药。对比SE2,处理器升数字人民币投入使用,微信可以使用数字人民币支付么?微信使用数字人民币支付具体流程1。准备工作首先更新至微信最新版本8。0。21版本。在应用商店搜索数字人民币,下载数字人民币(试点版)。2。打开数字人民币App。进入到我的数字人民币领导说不信谣不传谣,但是判断谣言的标准是什么呢?嗯嗯,这句话没毛病,但有逻辑错误。首先,不信谣。如果都知道它是谣言了,谁还信?这不是有病嘛。问题就在于,怎么判断一个新闻是不是谣言。第二个,不传谣。也是一样的道理,如果都知道是谣言滴滴并购曹操出行传言不实网约车竞争烧钱模式不可取本报记者赵学毅见习记者张晓玉4月8日,有消息称,多名滴滴员工入职曹操出行,例如曾在滴滴专车事业部担任总经理,负责代驾专车和区域网约车业务的龚昕担任曹操出行CEO,滴滴有意在适当时机vue3scriptsetup语法糖(随笔)LoongPandacodepre函数templateelbuttonsizesmallclickonClick点击elbuttontemplate计算属性(computed)观察如何研究加密世界里的Token?从投资人的角度,去判断一个加密项目主要关注点之一就是项目的Token设计模式从创业者的角度,如何设计项目的Token经济模型事关成败从实际情况而言,市面上的加密货币数量层出不穷,到新能源成为甘肃第一大电源记者获悉截至2021年底,甘肃电源总装机容量达6152。38万千瓦,其中新能源装机2896。54万千瓦,占比超47,新能源成为甘肃第一大电源。据介绍,甘肃省能源资源种类齐全,风电和元宇宙概念大热国际科技巨头在追捧什么说起当下科技界和投资界炙手可热的新事物,元宇宙(Metaverse)应当榜上有名。2021年以来,元宇宙概念得到了各方的空前关注,并且一直在持续升温。风口之下,众多科技巨头乃至多国加快实施重大科技需求揭榜攻关推动优质科技成果在河北转化落地来源人民网人民网石家庄4月9日电(杨文娟)当前,河北在科技项目组织实施中仍存在一些问题,比如,关键核心技术研发选题与市场需求贴合不紧密关键核心技术应用对象不明确技术攻关与产业化应用2022年,iPhone或迎销量大滑坡图片来源视觉中国文丨王新喜种种迹象与信号显示,高端电子消费产品线在今年面临的局势不乐观,在智能手机市场,iPhone在今年可能迎来销量大滑坡的局面。从国内来看,今年持续多变的疫情对
断供华为18个月后,台积电能否自由出货,三个动作说明了台积电作为全球知名的晶圆代工企业,由于芯片重要性的不断提升,让大家越来越熟悉。尤其是能够在全球芯片代工市场占到一半以上的市场份额,确实相当不简单。并且,最近高通和英伟达又先后要把芯舒适随心,音质醇美,南卡Litepro2真无线蓝牙耳机体验前段时间,我入手了南卡Litepro2真无线蓝牙耳机,它最为吸引我的地方如下一是自带充电仓,超长续航时间二是音乐游戏双模式,传输无延迟感三是迷你小巧,单个耳机仅3。8g,轻若无物四ORACLE强大的令人发指作为一名混迹数据库江湖十几年的老DBA,当你对关系型数据库的了解越来越深入时,你会发现,Oracle数据库真的是强大到令人发紫!Oracle数据库的强大,不仅体现在其对ACID的巧苹果iPhoneSE会不会扼杀廉价的中国智能手机?事实上没有太大的竞争关系,这么说的理由基于一下几点第一是用户已经几轮的删选了第二用户已经形成了自己的使用习惯第三价格并不是最终影响用户的选择产品的指标了苹果iphonese对于市场爷青回?HTC高管透露4月发布旗舰新机,融合元宇宙元素作为早期安卓手机阵营的巨头厂商,中国台湾手机品牌HTC近年来已经鲜有机型问世,偶尔推出的入门级机型也仅在台湾市场发售。不过在近日MWC2022期间,HTC高管CharlesHuan互联网是现在,元宇宙是未来元宇宙这个词在我们生活中汹涌而来,很多人对这个概念感觉到了好奇但又困惑。那今儿在这浅说元宇宙,帮大家了解元宇宙的概念。准确地说,元宇宙不是一个新的概念,它更像是一个经典概念的重生。JavaScript首位添加元素在数组arr开头添加元素item。不要直接修改数组arr,结果返回新的数组注意不直接修改数组!不直接修改数组!不直接修改数组!concatfunctionprepend(arr,i国内首款游戏平板开售骁龙8708。8英寸12GB256GB,仅售2499元声明原创不易,禁止搬运,违者必究!说到电子产品,手机最为普遍,之后就是平板电脑。对于一些学生族来说,他们对平板的需求更大,特别是这两年,因为环境因素所致,所以会通过线上进行教学。那4款游戏手机推荐最低仅需1599即可入手心里总想买点啥?看看必买,全网最有料的场景种草指南。近几年,由于王者荣耀英雄联盟等热门手游的兴起,许多厂商为了满足用户对于游戏体验的需求,纷纷开始在手机的游戏配置上下足了功夫,并为荣耀手机颜值天花板再降价,1亿66W,女神节馈赠佳品仅售2474元外观方面能够被称为是颜值天花板的手机并不多,当然这个手机颜值天花板的称号也曾经引起不同手机品牌之间的争论,两部发布时间非常接近的手机厂商均表示自己的手机才是手机颜值天花板。当然凡事手机上那些打码图片,现在能破解了此前我们提到一款能去除马赛克视频的播放器,该播放器利用了AI技术。根据官方给出的效果来看,这个播放器消除马赛克的效果还是很不错的,如下图虽然官方给出的效果很好,但网友测试后却发现效