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

缓存 | 从本地缓存到分布式缓存, Guava, Caffeine, Memcached, Redis

从本地缓存到分布式缓存 本文档中部分代码不保证可以运行 虽然标题为缓存,但在这里不仅仅会涉及缓存,还会涉及一些其他提高应用性能的方案。 在程序设计中,经常能听到的就是以时间换空间和以空间换时间。...缓存的使用 Java集合类 在上面提供了一个简单的例子,DBMirror使用Map来实现一个简单的内存缓存,同时Set、List都可以达到内存缓存的功能,根据并发情况可以选择不同的实现类,例如HashMap...说起 Guava, 很多人都不会陌生,它是 Google 提供的一个非常好用的 Java 工具包。...简化了缓存的使用,方便我们更加大胆的使用缓存 Caffeine Caffeine是一个基于 Java8 开发的提供了近乎最佳命中率的高性能的缓存库。...其性能测试可以查看 https://github.com/ben-manes/caffeine/wiki/Benchmarks Ehcache Ehcache是纯Java开源缓存框架,配置简单、结构清晰

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

    Emlog使用qq头像作为评论头像并缓存到本地

    思路:先判断该条评论是否填写了邮箱,未填写则使用默认;若填写了,再判断其中是否含有“@qq.com”;然后去除“@qq.com”并判断余下的部分是否为qq号,是则获取相应的头像并缓存下来,否则使用Gravatar...php //blog-tool:头像缓存到本地 function myGravatar($email, $s = 40, $d = 'monsterid', $g = 'g'){ $f = md5...php //blog-tool:获取qq头像并缓存到本地 function eflyGravatar($email,$s = 40) { if(empty($email)){ $...然后在你当前模板文件夹下新建一个"avatar"空文件夹用于放置缓存下来的头像,在当前模板文件夹下的images文件夹中放一个“avatar.jpg”文件用作未填写邮箱时的默认头像。...>这个函数也行,也能将头像缓存到本地,但是用不了qq头像的哦!

    27020

    java map 缓存_缓存用于

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

    1.1K20

    Java 缓存机制与缓存失效

    本文将介绍 Java 缓存机制 的基本原理,结合 Redis、Ehcache 等框架的应用,深入探讨缓存的常见策略和缓存失效的处理方法。...缓存的使用可以分为三个步骤: 查询缓存:首先从缓存中查找数据,如果缓存命中,直接返回结果。 更新缓存:如果缓存未命中,查询数据库或进行计算,得到结果后更新缓存。...二、Java 缓存框架介绍 缓存框架 适用场景 特点 常用功能 Ehcache 本地缓存 轻量级,支持内存和磁盘 TTL、TTI、LRU 缓存失效策略 Redis 分布式缓存、高并发 支持多种数据结构,...Ehcache Ehcache 是一个轻量级的 Java 缓存框架,支持内存缓存和磁盘缓存,可以集成到 Spring 等框架中,应用于本地缓存。 代码示例: <!...1000" timeToLiveSeconds="300" timeToIdleSeconds="300"> Java

    8010

    java http缓存

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

    1.2K80

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

    面试官心理分析 其实这是问到缓存必问的,因为缓存雪崩和穿透,是缓存最大的两个问题,要么不出现,一旦出现就是致命性的问题,所以面试官一定会问你。...面试题剖析 缓存雪崩 对于系统 A,假设每天高峰期每秒 5000 个请求,本来缓存在高峰期可以扛住每秒 4000 个请求,但是缓存机器意外发生了全盘宕机。...这样的话,缓存中不会有,请求每次都“视缓存于无物”,直接查询数据库。这种恶意攻击场景的缓存穿透就会直接把数据库给打死。 ?...解决方式很简单,每次系统 A 从数据库中只要没查到,就写一个空值到缓存去,比如 set -999 UNKNOWN。...缓存击穿 缓存击穿,就是说某个 key 非常热点,访问非常频繁,处于集中式高并发访问的情况,当这个 key 在失效的瞬间,大量的请求就击穿了缓存,直接请求数据库,就像是在一道屏障上凿开了一个洞。

    1.1K40

    如果CPU缓存足够大的话,是不是可以把系统装进缓存

    从事软件开发多年,这是一个非常有意思的话题,理论上是可行的但起码要满足两个条件,有这么容量的缓存其实就是不计代价,其二默认的操作系统可以针对缓存进行移植对接。...现在讲下缓存的原理,缓存就是数据交换区,计算机的工作原理是CPU访问的数据都是放置在内存区,如果需要保存操作硬盘来完成,现在常说的运行的程序文件存储在硬盘上,运行的时候在内存上,为了提升效率专门在cpu...上集成一个缓冲区,就是我们说到的缓存,cpu的缓存作用就是数据交换区,cpu在访问数据的时候第一优先级先把缓存里面的数据取出来,如果没有再从内存中获取,但这个效率就会下降很多,大家都知道缓存是个好东西,...多级缓存的原理如果再次深入学习的话,会变得十分复杂,缓存之间还需要固定的通讯格式,如果再加上多核cpu复杂度又是数量级的提升,所以芯片这块国内还是非常大的弱项,主要这项技术需要一个长时间的积累,不是单靠拿出几年的时间就能突击出来的...所以我们平时在买电脑的时候,一旦想追求点高速度就需要有大的缓存,而且增加一点很小的缓存就能增加不少金钱,所以缓存技术算是cpu里面一项非常重要的技术创新

    78840

    java缓存技术总结

    Cache 二、缓存的分类 1、基于web应用的系统架构图 2、在系统架构的不同层级之间,为了加快访问速度,都可以存在缓存 操作系统磁盘缓存->减少磁盘机械操作 数据库缓存->减少文件系统I/O 应用程序缓存...,使用对象缓存将会极大降低Web系统对于数据库的访问请求 良好的设计数据库结构和利用对象缓存,能够提供极高的性能,对象缓存适合OLTP(联机事务处理)应用 2、查询缓存 对数据库查询结果集进行缓存,类似数据库的...查询缓存和对象缓存适用的场景不一样,是互为补充的 当查询结果集涉及的表记录被修改以后,需要注意清理缓存 3、页面缓存 a、作用 针对页面的缓存技术不但可以减轻数据库服务器压力,还可以减轻应用服务器压力...OScache提供了简单的Servlet缓存(通过web.xml中的配置) 也可以自己编程实现Servlet缓存 III、页面内部缓存 针对动态页面的局部片断内容进行缓存,适用于一些个性化但不经常更新的页面...(例如博客) OSCache提供了简单的页面缓存 可以自行扩展JSP Tag实现页面局部缓存 六、web服务器端缓存 基于代理服务器模式的Web服务器端缓存,如squid/nginx Web服务器缓存技术被用来实现

    2.2K50

    java创建本地缓存模拟redis缓存操作

    java创建本地缓存,模拟redis的使用 在一般的小项目中,数据量不大.但是有的时候需要使用缓存记录一些标识或者票据之类的,比如我这边想实现,可以记录系统同时在线的用户数据,或者对其他数据的缓存记录,...创建缓存实体类 package com.adingxiong.cft.entity; import java.io.Serializable; /** * @author xiongc * @date...import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit...String, CacheEntity> cache = new ConcurrentHashMap(DEFAULT_CAPACITY); /** * 将key-value 保存到本地缓存并制定该缓存的过期时间...expireTime) { return putCloneValue(key, value, expireTime); } /** * 将值通过序列化clone 处理后保存到缓存

    2.2K41
    领券