防止缓存爆炸的快速提示

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

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

相关文章

设置过mysql远程连接后仍然无法进行远程连接 (mysql mysql报错2003 can't connect)

1、在控制面板上-〉系统和安全-》 window是防火墙-》打开或关闭Windows防火墙-》关闭Windows防火墙&#xff08;不推荐),这样mysql就可以进行远程连接但是有一个问题就是不安全。所以采取以下的方法。 2、 解决方法: (1.控制面板 打开防火墙,在进入规则中新建一个规则. (2. 选…

go 二进制程序守护_图解 Go 程序是怎样跑起来的

Go语言中文网&#xff0c;致力于每日分享编码、开源等知识&#xff0c;欢迎关注我&#xff0c;会有意想不到的收获&#xff01;刚开始写这篇文章的时候&#xff0c;目标非常大&#xff0c;想要探索 Go 程序的一生&#xff1a;编码、编译、汇编、链接、运行、退出。它的每一步具…

nginx 配置从零开始

作为一个 nginx 的初学者记录一下从零起步的点滴。 基本概念 Nginx 最常的用途是提供反向代理服务&#xff0c;那么什么反向代理呢&#xff1f;正向代理相信很多大陆同胞都在这片神奇的土地上用过了&#xff0c;原理大致如下图&#xff1a; 代理服务器作为客户端这边的中介接…

[MySQL]经常无故崩溃amd.dll , boot1.exe病毒

近段时间有大量客户反馈&#xff0c;mysql经常无故崩溃或者是在C盘根目录出现 amd.dll , boot1.exe文件此病毒为mysql数据库的漏洞所导致&#xff0c;目前所有版本均有此问题目前已经有大量的客户出现这个问题请收到此消息后立刻检查自己的C盘目录&#xff0c;是否有amd.dll , …

Spring启动和缓存抽象

缓存是大多数应用程序的主要组成部分&#xff0c;只要我们设法避免磁盘访问&#xff0c;缓存就会保持强劲。 Spring对各种配置的缓存提供了强大的支持 。 您可以根据需要简单地开始&#xff0c;然后进行更多可定制的操作。 这将是spring提供的最简单的缓存形式的示例。 Sprin…

关于python的if条件语句,whilefor循环等的简单说。

if 条件1:# 语句体# elif 条件2:# 语句体# elif 条件3:# 语句体# else:# 语句体 #从键盘输入一个值# num 8# num1 int(input("请输入一个整数&#xff1a;"))if num1 num: print("您猜对了")elif num1 < num:print("您猜小了")else:print(…

haproxy配置代理tomcat和nginx_你真的掌握LVS、Nginx及HAProxy工作原理吗?

当前大多数的互联网系统都使用了服务器集群技术&#xff0c;集群是将相同服务部署在多台服务器上构成一个集群整体对外提供服务。图片来自 Unsplash这些集群可以是 Web 应用服务器集群&#xff0c;也可以是数据库服务器集群&#xff0c;还可以是分布式缓存服务器集群等等。在实…

PostgreSQL新手入门

自从MySQL被Oracle收购以后&#xff0c;PostgreSQL逐渐成为开源关系型数据库的首选。 本文介绍PostgreSQL的安装和基本用法&#xff0c;供初次使用者上手。以下内容基于Debian操作系统&#xff0c;其他操作系统实在没有精力兼顾&#xff0c;但是大部分内容应该普遍适用。 一、安…

使用Junit和Easytest进行数据驱动的测试

在本文中&#xff0c;我们将看到如何使用Junit进行数据驱动的测试。 为此&#xff0c;我将使用一个名为EasyTest的库。 众所周知&#xff0c;对于TestNG&#xff0c;它已内置了数据提供程序。 通过简单的测试&#xff0c;我们可以使用Junit进行数据驱动的测试。 什么是数据驱…

Matlab代码的耗时分析、优化、加速

Profile(分析&#xff09; 在加速你的matlab程序之前&#xff0c;你需要知道你的代码哪一部分运行最慢。matlab提供个简单的机制&#xff0c;让你能够知道你 的代码的某一部分运行所占用CPU时间。通过在代码段开始添加tic&#xff0c;及在结束添加toc&#xff1b;matlab就能计算…

python整数逆序输出_利用Python实现倒序任意整数

这是很早以前学习C时候做过的一个练习题&#xff0c;题目的要求大概是把用户输入的三位数倒序输出&#xff0c;比如说用户输入123&#xff0c;然后程序应该输出的结果是321。如果遇到用户输入100&#xff0c;那么程序应该输出1。然后我给扩展一下&#xff0c;这个程序来适应于三…

谜题61:日期游戏

下面的程序演练了Date和Calendar类的某些基本特性&#xff0c;它会打印出什么呢&#xff1f; import java.util.*;public class DatingGame {public static void main(String[ ] args) { Calendar cal Calendar.getInstance(); cal.set(1999, 12, 31); // Year, Month, Day Sy…

Java 中Thread的sleep、join、yield方法解析

1.Thread中sleep方法作用是使当前线程等待&#xff0c;其他线程开始执行&#xff0c;如果有线程锁&#xff0c;sleep不会让出锁 没有加锁代码如下&#xff1a; public class SynchronizedSleepMethod {public static void main(String[] args) {MoneyMethod moneyMethod new M…

MySQL与PostgreSQL:该选择哪个开源数据库?哪一个更好?

Naresh Kumar是一位软件工程师与热情的博主&#xff0c;对编程与新事物充满了激情和兴趣。近日&#xff0c;Naresh撰写了一篇博文&#xff0c;对开源世界最常见的两种数据库MySQL与PostgreSQL的特点进行了详尽的分析和比对。 如果打算为项目选择一款免费、开源的数据库&#x…

jquery select change事件_jQuery实现省市联动效果

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title></head><body><select name"province"id"province"><option >请选择</option></select><selec…

MATLAB上的GPU加速计算——学习笔记

MATLAB目前只支持Nvidia的显卡。如果你的显卡是AMD的或者是Intel的&#xff0c;就得考虑另寻它路了。 MATLAB可谓工程计算中的神器&#xff0c;一方面它自带丰富的函数库&#xff0c;另一方面它所有的数据都是内建的矩阵类型&#xff0c;最后画图也方便&#xff0c;因此解决一…

java中代码块的概述_Java代码质量工具–概述

java中代码块的概述最近&#xff0c;我有机会在本地IT社区聚会上介绍了该主题。 这是基本演示&#xff1a; Java代码质量工具 以及更有意义的思维导图&#xff1a; 但是&#xff0c;我认为我需要更深入地探讨这一主题。 此博客文章应该像是在此方向上进行进一步调查的起点。 …

js原型、原型链、作用链、闭包全解

https://www.2cto.com/kf/201711/698876.html 【对象、变量】 一个对象就是一个类&#xff0c;可以理解为一个物体的标准化定义。它不是一个具体的实物&#xff0c;只是一个标准。而通过对象实例化得到的变量就是一个独立的实物。比如通过一个对象定义了“人”&#xff0c;通过…

Mysql 简介

一 简介&#xff1a;MySQL是最流行的开放源码SQL数据库管理系统&#xff0c;它是由MySQL AB公司开发、发布并支持的。MySQL AB是由多名MySQL开发人创办的一家商业公司。它是一家第二代开放源码公司&#xff0c;结合了开放源码价值取向、方法和成功的商业模型。 1.MySQL是一种数…

python高阶函数闭包装饰器_5.初识python装饰器 高阶函数+闭包+函数嵌套=装饰器...

一.什么是装饰器&#xff1f; 实际上装饰器就是个函数&#xff0c;这个函数可以为其他函数提供附加的功能。 装饰器在给其他函数添加功能时&#xff0c;不会修改原函数的源代码&#xff0c;不会修改原函数的调用方式。 高阶函数&#xff0b;函数嵌套&#xff0b;闭包 &#xff…