首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Guava Cache -- Java 应用缓存神器

导语: Guava 作为Google开源Java 库中精品成员,在性能、功能上都十分出色,本文将从实际使用角度,来对Guava进行讲解 在使用Cache之前,首先要考虑两个问题: 1、应该在什么情况下使用它...右边根据每个用户会看到不同数据需要对缓存做特别处理,这里在后面文章会讲解到。 了解到了正确应用场景,接下来就是了解正确使用姿势了。...已经大致引入了前面提出问题。 1、控制缓存大小: maximumSize 设定了该缓存最大存储单位(key)个数。 maximumWeight 是根据设定缓存数据最大值。...根据大小 maximumSize maximumWeight 根据引用 weakKeys weakValues softValues 根据引用类型策略作者本人使用很少,因为Java虚拟机垃圾回收时机是不可主动控制...缓存使用最常见问题,上文中,提到缓存数据拉取出来后,需要添加一些关于每一个访问用户额外信息,例如拉取出上课列表后,每一个用户针对课程状态是不一样(报名状态),通常会犯一个错误就是直接在缓存数据基础上进行修改

7.4K147

应用系统缓存体系深入研究(Java版)

一、序言 在使用MyBatis、MybatisPlus等DAO层数据库访问框架式,常常会与一级缓存、二级缓存打交道,为了增强对缓存体系整体把控力,提高软件应用响应速度,这里对三级缓存一次梳理。...[image-20211027110637436.png] 缓存固然能够提高系统性能,与此同时也带来了脏数据副作用,系统缓存体系、缓存结构、缓存策略、缓存介质等对可能出现脏数据产生影响。...缓存是一把双刃剑,既能够提高应用系统效率,同时避免脏数据发生也是不小工作量。特别是不同层次缓存同时使用时,出现数据异常概率快速提高。...B 对数据库数据做了更新,联合查询与更新表如果不在同一个namespace下,在缓存刷新时间结束前是收不到更新缓存信号,毫无疑问是存在脏数据。...2、回避脏数据 设置合理缓存过期时间 二级缓存数据强制设置过期时间,保证缓存数据拥有被动失效能力。

51130
您找到你想要的搜索结果了吗?
是的
没有找到

高阶应用-缓存

缓存数据就是为了保护那些需要很多计算资源结果,这样就不必在下次重新消耗资源进行计算 二、缓存系统工作原理 对于给定网址,尝试从缓存中找到网址,如果页面在缓存中,直接返回缓存页面,如果缓存中没有,一系列操作...(比如查数据库)后,保存生成页面内容到缓存系统以供下一次使用,然后返回生成页面内容 三、缓存好处 减轻服务器压力 提供良好用户体验 四、缓存方式 缓存在数据库中 配置settings.py...hljs-string">'MAX_ENTRIES':'10', # 缓存数据最大条数... } } 生成缓存所需要缓存表 python manage.py createcachetable [table_name] python manage.py createcachetable...cache_page装饰器参数: time 秒 过期时间 cache缓存配置 默认为default key_prefix 缓存前缀 from

36820

从前端角度理解缓存缓存是怎么回事缓存类型缓存存储在哪薄荷应用CDN缓存如何合理应用缓存

缓存概念分很多种,本次讨论主要就是前端缓存Http缓存缓存是怎么回事 前端发送请求主要经历以下三个过程,请求->处理->响应。 如果有多次请求就需要重复执行这个过程。...缓存类型 浏览器有如下常见几个字段: expires: 设置缓存过期时间 private: 客户端可以缓存 public: 客户端和代理服务器都可缓存 max-age=xxx: 缓存内容将在 xxx...但是强制缓存存在一个问题,该缓存方式优先级高,如果在过期时间内缓存资源在服务器上更新了,客服端不能及时获取最新资源。 协商缓存 协商缓存解决了无法及时获取更新资源问题。...这种方式也只能缓存派生资源 304 Not Modified 访问服务器,发现数据没有 更新,服务器返回此状态码。然后从缓存中读取数据。 薄荷应用 举一个简单小?...如何合理应用缓存 强制缓存优先级最高,并且资源改动在缓存有效期内都不会对缓存产生影响,因此该方法适用于大型且不易修改资源文件,例如第三方CSS、JS文件或图片资源,文件后可以加上hash进行版本区分

1.1K20

java map 缓存_缓存用于

大家好,又见面了,我是你们朋友全栈君。 缓存 什么是缓存? 平常开发项目中,多多少少都会使用到缓存,因为一些数据我们没有必要每次查询时候都去查询到数据库。...缓存使用场景: 在Java应用中,对于访问频率高,更新少数据,通常方案是将这类数据加入缓存中,相对从数据库中读取,读缓存效率会有很大提升。 在集群环境下,常用分布式缓存有Redis等。...但在某些业务场景上,可能不需要去搭建一套复杂分布式缓存系统,在单机环境下,通常是会希望使用内部缓存(LocalCache)。...使用map缓存 方案: 基于ConcurrentHashMap实现数据缓存,实现线程安全要求 SoftReference:当内存不够时候,GC会回收SoftReference所引用对象 SoftReference...对于Cache,我们希望被缓存对象最好始终常驻内存,但是如果JVM内存吃紧,为了不发生OutOfMemoryError导致系统崩溃,必要时候也允许JVM回收Cache内存,待后续合适时机再把数据重新

1K20

Android 获取应用缓存大小与清除缓存方法

如下所示: package com.lucasey.littleant.frame; /** * 文 件 名: FileCacheUtils.java * 描 述: 主要功能有清除内/外缓存,清除数据库...,清除sharedPreference,清除files和清除自定义目录 * */ import java.io.File; import java.math.BigDecimal; import...*/ public class FileCacheUtils { /** * * 清除本应用内部缓存(/data/data/com.xxx.xxx/cache) * * * * @param.../files/ 目录,一般放一些长时间保存数据 //Context.getExternalCacheDir() -- SDCard/Android/data/你应用包名/cache/目录,一般存放临时缓存数据...getCacheSize(File file) throws Exception { return getFormatSize(getFolderSize(file)); } } 以上这篇Android 获取应用缓存大小与清除缓存方法就是小编分享给大家全部内容了

2.4K20

java缓存使用

说起缓存,首先映入我们脑海好像有很多种,比如说java自带map,业界流行分布式缓存服务器redis,其实还有mc了,但是mc很少用到,至少自己从未用到过,了解一下就可以了,有的时候,你知道仅仅需要了解...今天自己分享是谷歌提供一个自带过期时间map,为啥要分享这篇文章呢,又是自己一次总结,因为分配给自己需求里面就是在单机版服务进行任务完成,但是当时自己用了另外一个方法去做,但是多人情况下就出现了问题...首先,我们需要在自己项目mavenpom文件加上下面的依赖。 <!...com.google.common.cache.CacheBuilder; import lombok.*; import lombok.experimental.Accessors; import lombok.extern.slf4j.Slf4j; import java.time.Duration...; import java.util.HashSet; import java.util.Set; import java.util.concurrent.ConcurrentMap; import java.util.concurrent.TimeUnit

61120

java缓存技术介绍

Cache 二、缓存分类 1、基于web应用系统架构图 2、在系统架构不同层级之间,为了加快访问速度,都可以存在缓存 操作系统磁盘缓存->减少磁盘机械操作 数据库缓存->减少文件系统I/...O 应用程序缓存->减少对数据库查询 Web服务器缓存->减少应用服务器请求 客户端浏览器缓存->减少对网站访问 三、操作系统缓存 1、文件系统提供Disk Cache:操作系统会把经常访问到文件内容放入到内存当中...R Mapping框架要求进行针对性设计,使用对象缓存将会极大降低Web系统对于数据库访问请求 良好设计数据库结构和利用对象缓存,能够提供极高性能,对象缓存适合OLTP(联机事务处理)应用 2...查询缓存和对象缓存适用场景不一样,是互为补充 当查询结果集涉及表记录被修改以后,需要注意清理缓存 3、页面缓存 a、作用 针对页面的缓存技术不但可以减轻数据库服务器压力,还可以减轻应用服务器压力...,下一次请求直接访问静态链接页面 动态页面静态化技术广泛应用于互联网CMS/新闻类Web应用,但也有BBS应用使用该技术,例如Discuz!

68830

SpringBoot缓存应用实践

1 SpringBoot缓存应用实践 缓存是最直接有效提升系统性能手段之一。个人认为用好用对缓存是优秀程序员必备基本素质。...Get相关方法,注意多个参数情况,缓存接口里面传人Function,这是Java8提供函数式接口,虽然支持入参个数有限(这里你会非常怀念.NET下Func委托),但是仅对Java这个语言来说,...常见应用场景,比如,有些几乎不变基础数据缓存1天,有些热点数据缓存2小时,有些会话数据缓存5分钟等等。...三、分布式缓存 分布式缓存产品非常多,本文使用应用普遍Redis,在Spring Boot应用中使用Redis非常简单。...在Spring Boot应用中使用缓存则非常简洁,选择调用上面包装好缓存接口即可。

1.4K10

java http缓存

前者减少了网络回路数量,挺高响应速度,HTTP利用一个“过期(expiration)”机制来为此目的。后者减少了网络应用带宽,HTTP用“验证(validation)”机制来为此目的。...缓存如何工作 所有的缓存都用一套规则来帮助他们决定什么时候使用缓存副本提供服务(假设有副本可用情况下);一些规则在协议中有定义(HTTP协议1.0和1.1),一些规则由缓存管理员设置(浏览器用户或者代理服务器管理员...); 一般说来:遵循以下基本规则(不必担心,你不必知道所有的细节,细节将随后说明) 如果响应头信息:告诉缓存器不要保留缓存缓存器就不会缓存相应内容; 如果请求信息是需要认证或者安全加密,相应内容也不会被缓存...一个缓存副本如果含有以下信息:内容将会被认为是足够新 含有完整过期时间和寿命控制头信息,并且内容仍在保鲜期内; 浏览器已经使用过缓存副本,并且在一个会话中已经检查过内容新鲜度; 缓存代理服务器近期内已经使用过缓存副本...,并且内容最后更新时间在上次使用期之前; 够新副本将直接从缓存中送出,而不会向源服务器发送请求; 如果缓存副本已经太旧了,缓存服务器将向源服务器发出请求校验请求,用于确定是否可以继续使用当前拷贝继续服务

1.2K80

Java本地缓存

本地缓存通常由应用程序使用,可以提高应用程序性能和响应速度。 Map 在Java中,实现本地缓存通常使用key/value形式数据结构,可以选择使用Map集合来作为存储容器。...Guava Cache(也称为Guava缓存)是Google开源一个Java库,用于实现本地缓存。它是Guava项目的一部分,是Google对Java集合框架扩展和增强。...Guava Cache提供了一个简单而强大缓存实现,旨在提高应用程序性能和响应速度。它支持线程安全,并提供了一些高级特性,例如自动加载缓存、大小限制、过期策略和统计信息收集等。...本地缓存与分布式缓存对应,缓存进程和应用进程同属于一个JVM,数据读、写在一个进程内完成。本地缓存没有网络开销,访问速度很快。...Ehcache是一种广泛使用开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器。

23721

解决缓存穿透几种应用思考

说可能,是因为这里有个误差,和布隆过滤器容量及应用算法有关。 所以是要判断存在还是判断不存在,要结合实际应用中,能否接受误差,及能够接受多大误差来决定。...这是一个正常解决方法,对于很多应用场景都很适用。但是对于我们上述列举情景,这种方法会带来一些不可避免隐患。...这,确实是这种方式埋下一个问题,但是相对于未应用过滤器之前,这种对于业务结果正确性是没有影响,只是减慢了一部分查询响应时间。...2、移除入库查询 其实,对于我们上述这种缓存应用场景,我们为什么要入库查询呢? 因为缓存过期。...但是,像我们列举这种量比不均场景,就不可避免引发穿透这种更加具有危害性结果。 因此,此处,我们需要换一种方式来应用缓存

32920

大道缓存1 缓存特征2 缓存介质3 缓存分类和应用场景缓存实战

3 缓存分类和应用场景 根据缓存应用藕合度,分为local cache(本地缓存)和remote cache(分布式缓存) 本地缓存:指的是在应用缓存组件,其最大优点是应用和cache是在同一个进程内部...,请求缓存非常快速,没有过多网络开销等,在单应用不需要集群支持或者集群情况下各节点无需互相通知场景下使用本地缓存较合适;同时,它缺点也是应为缓存应用程序耦合,多个应用程序无法直接共享缓存,各应用或集群各节点都需要维护自己单独缓存...分布式缓存:指的是与应用分离缓存组件或服务,其最大优点是自身就是一个独立应用,与本地应用隔离,多个应用可直接共享缓存 3.1 本地缓存 3.1.1 编程直接实现缓存 个别场景下,我们只需要简单缓存数据功能...3.1.2 Ehcache Ehcache是现在最流行Java开源缓存框架,配置简单、结构清晰、功能强大,是一个非常轻量级缓存实现,我们常用Hibernate里面就集成了相关缓存功能 ?...Guava Cache Guava Cache是Google开源Java重用工具集库Guava里一款缓存工具,其主要实现缓存功能有: 自动将entry节点加载进缓存结构中; 当缓存数据超过设置最大值时

75321

Java高并发缓存架构,缓存雪崩、缓存穿透之谜

面试官心理分析 其实这是问到缓存必问,因为缓存雪崩和穿透,是缓存最大两个问题,要么不出现,一旦出现就是致命性问题,所以面试官一定会问你。...大约在 3 年前,国内比较知名一个互联网公司,曾因为缓存事故,导致雪崩,后台系统全部崩溃,事故从当天下午持续到晚上凌晨 3~4 点,公司损失了几千万。 缓存雪崩事前事中事后解决方案如下。...数据库 id 是从 1 开始,结果黑客发过来请求 id 全部都是负数。这样的话,缓存中不会有,请求每次都“视缓存于无物”,直接查询数据库。这种恶意攻击场景缓存穿透就会直接把数据库给打死。 ?...然后设置一个过期时间,这样的话,下次有相同 key 来访问时候,在缓存失效之前,都可以直接从缓存中取数据。...缓存击穿 缓存击穿,就是说某个 key 非常热点,访问非常频繁,处于集中式高并发访问情况,当这个 key 在失效瞬间,大量请求就击穿了缓存,直接请求数据库,就像是在一道屏障上凿开了一个洞。

1.1K40

理解Java Integer缓存策略

本文将介绍 Java 中 Integer 缓存相关知识。这是 Java 5 中引入一个有助于节省内存、提高性能特性。...首先看一个使用 Integer 示例代码,展示了 Integer 缓存行为。接着我们将学习这种实现原因和目的。你可以先猜猜下面 Java 程序输出结果。...Java 中 Integer 缓存实现 在 Java 5 中,为 Integer 操作引入了一个新特性,用来节省内存和提高性能。整型对象在内部实现中通过使用相同对象引用实现了缓存和重用。...这使我们可以根据应用程序实际情况灵活地调整来提高性能。是什么原因选择这个 -128 到 127 这个范围呢?因为这个范围整数值是使用最广泛。...Java 语言规范中缓存行为 在 Boxing Conversion 部分Java语言规范(JLS)规定如下: 如果一个变量 p 值属于:-128至127之间整数(§3.10.1),true 和

75210

Redis应用场景:缓存

在日常工作中,Redis最常用场景就是缓存场景,为什么Redis能作为缓存呢?...缓存特征 系统中,不同层访问速度不一样,缓存一定是一个快速子系统,在一些业务场景中,我们把频繁访问数据放在缓存中,就是为了避免从慢速子系统中存取数据,加快数据访问速度: 缓存处理请求两种情况...把Redis用作缓存时,我们会把Redis部署在数据库前端,业务应用在访问数据时,会先查询Redis中是否保存了相应数据,所以,使用Redis缓存会有两种情况: 缓存命中:Redis中有数据,直接读取...缓存雪崩 缓存雪崩指的是大量应用请求无法在Redis缓存中进行处理,应用将大量请求发送到数据库,导致数据库压力骤增,一般由于两个原因导致: 缓存中有大量数据同时过期,导致大量请求无法处理; 缓存实例发生故障宕机...如果应用持续有大量请求访问数据,就会同时给缓存和数据库带来巨大压力。

53710

Java 中整型缓存机制

本文将介绍Java中Integer缓存相关知识。这是在Java 5中引入一个有助于节省内存、提高性能功能。首先看一个使用Integer示例代码,从中学习其缓存行为。...在Java中,==比较是对象应用,而equals比较是值。所以,在这个例子中,不同对象有不同引用,所以在进行比较时候都将返回false。...= integer4 Java中Integer缓存实现 在Java 5中,在Integer操作上引入了一个新功能来节省内存和提高性能。整型对象通过使用相同对象引用实现了缓存和重用。...后来在Java 6中,可以通过java.lang.Integer.IntegerCache.high设置最大值。这使我们可以根据应用程序实际情况灵活地调整来提高性能。...Java语言规范中缓存行为 在Boxing Conversion部分Java语言规范(JLS)规定如下: 如果一个变量p值是: -128至127之间整数(§3.10.1) true 和 false

88530
领券