本地缓存防止缓存击穿

在很多情况下,您都可以从应用程序中的常用对象缓存中受益,特别是在面向Web和微服务的环境中。 您可以在Java中执行的最简单的缓存类型可能是引入一个私有HashMap,在计算对象之前先查询该哈希表,以确保您不会重复执行此操作。

这是一个例子:

public class PrimeService {private Map<Long, BigInteger> cache = new HashMap<>();public BigInteger getPrime(long minimum) {return cache.computeIfAbsent(minimum, m -> BigInteger.valueOf(m).nextProbablePrime());}}

这是解决该问题的快速方法,但遗憾的是效率不高。 在几个月后人们将各种各样的疯狂数字输入到服务中之后,我们将拥有一个非常大的HashMap,这可能会导致我们的内存不足。

这是解决这个问题的快速技巧。 除了使用HashMap,还可以使用LinkedHashMap并简单地覆盖方法removeEldestEntry。 这样,您就可以配置自己的限制功能以防止地图爆炸。

public class PrimeService {public final static int CACHE_MAX_SIZE = 1_000;private Map<Long, BigInteger> cache = new LinkedHashMap<>() {@Overrideprotected boolean removeEldestEntry(Map.Entry<ID, Boolean> eldest) {return size() > PrimeService.CACHE_MAX_SIZE;}};public BigInteger getPrime(long minimum) {return cache.computeIfAbsent(minimum, m -> BigInteger.valueOf(m).nextProbablePrime());}}

现在,我们已经成功限制了缓存,防止了缓存爆炸。 随着新条目的添加,旧条目将被删除。 应该注意的是,这种解决方案在小型应用程序中效果很好,但是对于更高级的方案,您可能想使用外部缓存解决方案。 如果您有兴趣在不编写大量SQL代码的情况下在SQL数据库中缓存条目,我建议您使用Speedment,因为它是轻量级的并且具有非常流畅的API。

直到下一次!

翻译自: https://www.javacodegeeks.com/2016/12/quick-tip-prevent-caches-exploding.html

本地缓存防止缓存击穿

本地缓存防止缓存击穿_防止缓存爆炸的快速提示相关推荐

  1. java缓存击穿_对缓存击穿的一点思考

    点击上方"Java知音",选择"置顶公众号" 技术文章第一时间送达! 作者:张丰哲 www.jianshu.com/p/93767dac6b56 技术经验交流: ...

  2. 防止缓存爆炸的快速提示

    在很多情况下,您都可以从应用程序中的常用对象缓存中受益,特别是在面向Web和微服务的环境中. 您可以在Java中执行的最简单的缓存类型可能是引入一个私有HashMap,在计算对象之前先对其进行查询,以 ...

  3. 同时存多个变量缓存 微信小程序_微信小程序 缓存(本地缓存、异步缓存、同步缓存)详解...

    微信小程序 缓存 关于本地缓存 1.wx.setStorage(wx.setStorageSync).wx.getStorage(wx.getStorageSync).wx.clearStorage( ...

  4. beyond compare4过期解决方法_面试必备:缓存穿透、雪崩解决方案及缓存击穿的四种解决方案...

    前言 设计一个缓存系统,不得不要考虑的问题就是:缓存穿透.缓存击穿与失效时的雪崩效应. 缓存穿透 缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到 ...

  5. 缓存击穿和缓存穿透的区别_后端RoadMap011:缓存穿透、缓存击穿、缓存雪崩区别和解决方案...

    一.缓存处理流程 前台请求,后台先从缓存中取数据,取到直接返回结果,取不到时从数据库中取,数据库取到更新缓存,并返回结果,数据库也没取到,那直接返回空结果. 二.缓存穿透 描述: 缓存穿透是指缓存和数 ...

  6. mysql缓存怎么防止缓存击穿_带你搞明白什么是缓存穿透、缓存击穿、缓存雪崩...

    目录什么是缓存 人在地上走,锅从天上来 缓存穿透什么是缓存穿透 解决方案将空数据存入缓存 布隆过滤器 缓存击穿什么是缓存击穿 解决方案自动更新 定时刷新 程序加锁 缓存雪崩什么是缓存雪崩 解决方案随机 ...

  7. 缓存穿透与击穿问题解决方案

    在互联网场景中缓存系统是一个重要系统,为了防止流量频繁访问数据库,一般会在数据库层前设置一道缓存层作为保护. 缓存是一个广义的概念,核心要义是将数据存放在离用户更近的地方,或者是将数据存放在访问更快的 ...

  8. 离线缓存占内存吗_彻底弄懂浏览器缓存策略

    浏览器缓存策略对于前端开发同学来说不陌生,大家都有一定的了解,但如果没有系统的归纳总结,可能三言两语很难说明白,甚至说错,尤其在面试过程中感触颇深,很多候选人对这类基础知识竟然都是一知半解,说出几个概 ...

  9. 缓存穿透、击穿、雪崩

    一.缓存穿透 缓存穿透是指缓存和数据库中均不存在目标数据,而用户不断发起请求,缓存也得不到更新,由此每次请求该数据都会到数据库.高并发量,就会对后端的 DB 系统造成很大压力.如查询 id 为&quo ...

最新文章

  1. mysql 中文截取_mysql 截取中文字符
  2. Java知识汇总-思维导图
  3. 化工原理第四版课后习题答案
  4. springboot netty给特定客户端推送_Spring Boot 又升级了?2.0 你搞懂了吗?!
  5. C++_指针的定义使用_指针所占内存空间_空指针_野指针---C++语言工作笔记023
  6. 20172304 《程序设计与数据结构》 第一周学习总结
  7. 3dmax:3dmax的软件面板简介、软件配置优化、设计流程、设计经验、六种建模方法
  8. Java数组分配的关键字_理解JAVA数组 - 小南超子的个人空间 - OSCHINA - 中文开源技术交流社区...
  9. PAT a1125
  10. VSS无法访问 (0x80072EFD) 转载
  11. 踩坑谷歌浏览器翻译插件自动创建font节点
  12. BSL编程语言 —— 系统化程序设计
  13. OpenGL三维变换与三维投影实例(行星绕日旋转)
  14. xx省联通SUN M5000清除故障灯MBU_B Degraded
  15. 如何开发Android安卓RFID读卡APP
  16. 《U-Net: Convolutional Networks for Biomedical Image Segmentation》学习笔记
  17. VMware Workstation 安装 CentOS-7 (1804) 教程
  18. 动态网站的制作与设计_动态网站设计要注意那些细节
  19. html滑动解锁,js实现滑动解锁效能(PC+Moblie)
  20. maven替换中央仓库- 阿里云

热门文章

  1. 8.16模拟:树上算法
  2. P8208-[THUPC2022 初赛]骰子旅行【dp】
  3. YbtOJ-大收藏家【分层图,最大流】
  4. P6348-[PA2011]Journeys【线段树优化建图,最短路】
  5. jzoj2908,P1527-[集训队互测 2012]矩阵乘法【整体二分,二维树状数组】
  6. 亿些模板【数论数学】
  7. codeforces1559 D2. Mocha and Diana (Hard Version)(并查集+启发式合并+随机化)
  8. Codeforces Round #663 (Div. 2)
  9. 【高斯消元】球形空间产生器(luogu 4035/金牌导航 高斯消元-1)
  10. 北方大学 ACM 多校训练赛 第十五场 蜘蛛牌A