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

本地缓存防止缓存击穿

在很多情况下,您都可以从应用程序中的常用对象缓存中受益,特别是在面向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

本地缓存防止缓存击穿

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/335616.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php mysql导出csv文件_详解PHP导入导出CSV文件

我们先准备mysql数据表&#xff0c;假设项目中有一张记录学生信息的表student&#xff0c;并有id&#xff0c;name&#xff0c;sex&#xff0c;age分别记录学生的姓名、性别、年龄等信息。CREATE TABLE student (id int(11) NOT NULL auto_increment,name varchar(50) NOT NULL…

HH SaaS电商系统的入库功能模块设计

文章目录创建入库单的场景创建入库单的业务流程商品直接入库内部仓退货入库&#xff08;内部仓&#xff09;换货入库&#xff08;内部仓&#xff09;退货入库&#xff08;外部仓&#xff09;换货入库&#xff08;外部仓&#xff09;备货入库&#xff08;内部仓&#xff09;备货…

aws ecr_在ECR上推送Spring Boot Docker映像

aws ecr在先前的博客中&#xff0c;我们将Spring Boot应用程序与EC2集成在一起。 它是您可以在Amazon Web Services上进行的最原始的部署形式之一。 在本教程中&#xff0c;我们将使用我们的应用程序创建一个docker映像&#xff0c;该映像将存储到Amazon EC2容器注册表中 。 …

HH SaaS电商系统的商品营销角标功能模块设计

1、角标只属于商城&#xff0c;自营店铺共享商城的角标&#xff0c;第三方店铺可以申请角标 2、角标跟着素材模板走&#xff0c;关联素材模板id&#xff0c;一对多关系

python为什么这么小_同样是 Python,怎么区别这么大

发现问题上周&#xff0c;我的测试同事告诉我&#xff0c;你的用户名怎么还允许中文啊&#xff1f;当时我心里就想&#xff0c;你们测试肯定又搞错接口了&#xff0c;我用的是正则\w过滤了参数&#xff0c;怎么可能出错&#xff0c;除非Python正则系统出错了&#xff0c;那是不…

dynamodb容器使用_使用DynamoDBMapper扫描DynamoDB项目

dynamodb容器使用之前&#xff0c;我们介绍了如何使用DynamoDBMapper或底层Java api查询DynamoDB数据库。 除了发出查询之外&#xff0c;DynamoDB还提供扫描功能。 扫描的目的是获取您在DynamoDB表上可能拥有的所有项目。 因此&#xff0c;扫描不需要任何基于我们的分区键或…

HH SaaS电商系统的商品营销标签功能模块设计

1、营销标签只属于商城&#xff0c;自营店铺共享商城的营销标签&#xff0c;第三方店铺可以申请营销标签 2、营销标签跟着商品走&#xff0c;关联spu_ext_id&#xff0c;多对多关系 3、一个商品最多添加5个营销标签

python加减法计算题 代码_关于《剑指offer》中不用加减乘除做加法的Python代码的问题...

题目如下&#xff1a;写一个函数&#xff0c;求两个整数之和&#xff0c;要求在函数体内不得使用、-、*、/四则运算符号。题目不难&#xff0c;可以采用位操作来实现&#xff0c;利用异或运算来计算不带进位的加法结果&#xff0c;利用与运算计算进位的标志&#xff0c;然后将这…

接口方法javadoc注释_继承Javadoc方法注释

接口方法javadoc注释尽管用于javadoc工具的JDK工具和实用程序页面通过实现和继承方法来描述Javadoc方法注释重用的规则&#xff0c;但是当实际上不需要使用{inheritDoc}时&#xff0c;很容易不必要地显式描述注释继承&#xff0c;因为会使用相同的注释隐式继承。 Java 8 javado…

HH SaaS电商系统的商品销售管理标签功能模块设计

1、商城和店铺有各自的销售管理标签 2、商品管理标签跟着商品走&#xff0c;关联spu_ext_id或者sku_ext_id&#xff0c;多对多关系

redis java 监听_从零手写实现redis(四)添加监听器

前言java从零手写实现redis&#xff08;一&#xff09;如何实现固定大小的缓存&#xff1f;java从零手写实现redis&#xff08;三&#xff09;redis expire 过期原理java从零手写实现redis&#xff08;三&#xff09;内存数据如何重启不丢失&#xff1f;本节&#xff0c;让我们…

neo4j导入两个文件_Neo4j:找到两个纬度/经度之间的中点

neo4j导入两个文件在过去的两个周末中&#xff0c;我一直在处理一些运输数据&#xff0c;并且我想运行A *算法来查找两个车站之间的最快路线。 A *算法将EstimateEvaluator作为其参数之一&#xff0c;并且该评估器查看节点的经度/纬度&#xff0c;以确定一条路径是否值得遵循。…

HH SaaS电商系统的商品营销服务功能模块设计

商品营销服务 1、服务只属于商城&#xff0c;自营店铺共享商城的服务&#xff0c;第三方店铺可以申请服务 2、服务跟着素材模板走&#xff0c;关联素材模板id&#xff0c;多对多关系

drill apache_如何指南:Apache Drill入门

drill apacheApache Drill是一个引擎&#xff0c;可以连接到许多不同的数据源&#xff0c;并为它们提供SQL接口。 它不仅是遍历任何复杂事物SQL界面&#xff0c;而且是功能强大的界面&#xff0c; 其中包括对许多内置函数和窗口函数的支持。 尽管它可以连接到可以使用SQL进行查…

mac mysql 重设密码_Mac下忘记mysql密码重新设置密码的图文教程

MySQL 文件在路径/usr/local/mysql下1&#xff0c; 在系统偏好设置中关闭 mysql &#xff1a; Stop MySQL Server2 &#xff0c;打开终端进入路径  /usr/local/mysql/bin输入命令 sudo su&#xff0c; 然后输入开机密码。然后输入命令&#xff1a;./mysqld_safe –skip-grant-…

HH SaaS电商系统的商品销售分区功能模块设计

商品销售分区 1、销售分区跟着商品走&#xff0c;关联spu_ext_id,多对多关系 2、商城和店铺有各自的销售分区

spring 安全编码_Spring安全性和密码编码

spring 安全编码在以前的文章中&#xff0c;我们深入探讨了Spring安全性。 我们实现了由jdbc支持的安全性&#xff0c;基于自定义 jdbc查询的安全性以及从nosql数据库检索安全性的信息。 通过足够小心&#xff0c;我们会发现密码为纯文本格式。 尽管这在实际环境中可以很好地用…

python网管系统_IT外包网管服务,Python密度聚类算法-DBSCAN实践

蓝盟 IT小贴士&#xff0c;来喽&#xff01;可以看出&#xff0c;a点附近的点密度大&#xff0c;红色的圆按照一定的规则在这里滚动&#xff0c;最终收纳a点附近的5点&#xff0c;标记为红色是同一个簇。其他没有收纳的东西&#xff0c;按照相同的规则进行集群化。从图像上来看…

HH SaaS电商系统的商品物流模板的功能设计

商品物流模板 1、物流模板跟着商品走&#xff0c;关联spu_ext_id,一对多关系 2、商城和店铺有各自的物流模板

activiti 变量_如何在Activiti中使用瞬态变量

activiti 变量我们昨天发布的Activiti v6 Beta3中已经加入了很多需要的功能-临时变量。 在这篇文章中&#xff0c;我将向您展示一个示例&#xff0c;说明如何使用瞬态变量来覆盖一些以前不可能&#xff08;或最佳&#xff09;的高级用例。 到目前为止&#xff0c;Activiti中的…