guava之cache】的更多相关文章

转载:http://outofmemory.cn/java/guava/cache/how-to-use-guava-cache   http://www.cnblogs.com/parryyang/p/5777019.html   https://yq.aliyun.com/articles/46900            //源码解析 作为Google的core libraries,直接提供Cache实现,足以证明Cache应用的广泛程度. 然而作为工具库中的一部分,我们自然不能期待Gua…
一.简介 Google Guava包含了Google的Java项目许多依赖的库,如:集合 [collections] .缓存 [caching] .原生类型支持 [primitives support] .并发库 [concurrency libraries] .通用注解 [common annotations] .字符串处理 [string processing] .I/O 等等.本文只介绍其中的缓存部分. Guava Cache是一种本地缓存实现,支持多种缓存过期策略.性能好,简单易用.缓存…
写了上面一篇,看了点eventbus相关的guava代码后,发现里面用到了很多其他guava包里的方法,所以顺着看一下,比如之前用到的map都是guava自己的 Multimap:可以包含有几个重复Key的value,你可以put进入多个不同value但是相同的key,但是又不是让后面覆盖前面的内容. Table:二维矩阵类似,有需要这类结构可以参考 Hash:还有一堆已经实现好了的哈希方法,如果有需要可以直接用 有些代码也可以从中参考 对于Cache首先写一个例子,一般缓存肯定要考虑的是怎么存…
1. 概述 项目中,创建的活动内容存入redis,然后需要用到活动内容的地方,从redis去取,然后参与计算. 活动数据的一个特点是更新不频繁.数据量不大.因为项目部署一般是多机器.多实例,除了redis,有没有其他实现呢? Guava的 loading cache是本地缓存,数据量不是很大时 可以适用(如果有大量的key-value数据缓存本地,本机也吃不消啊), 然后多机器多实例怎么同步呢?想到了zookeeper.... 2. 代码 2.1 模拟多实例 package TestZK; im…
package guavacache; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; import com…
转自:http://ifeve.com/google-guava-cachesexplained/ 范例 01 LoadingCache<Key, Graph> graphs = CacheBuilder.newBuilder() 02         .maximumSize(1000) 03         .expireAfterWrite(10, TimeUnit.MINUTES) 04         .removalListener(MY_LISTENER) 05         …
缓存,在我们日常开发中是必不可少的一种解决性能问题的方法.简单的说,cache 就是为了提升系统性能而开辟的一块内存空间. 缓存的主要作用是暂时在内存中保存业务系统的数据处理结果,并且等待下次访问使用.在日常开发的很多场合,由于受限于硬盘IO的性能或者我们自身业务系统的数据处理和获取可能非常费时,当我们发现我们的系统这个数据请求量很大的时候,频繁的IO和频繁的逻辑处理会导致硬盘和CPU资源的瓶颈出现.缓存的作用就是将这些来自不易的数据保存在内存中,当有其他线程或者客户端需要查询相同的数据资源时,…
前言 Google 出的 Guava 是 Java 核心增强的库,应用非常广泛. 我平时用的也挺频繁,这次就借助日常使用的 Cache 组件来看看 Google 大牛们是如何设计的. 缓存 本次主要讨论缓存. 缓存在日常开发中举足轻重,如果你的应用对某类数据有着较高的读取频次,并且改动较小时那就非常适合利用缓存来提高性能. 缓存之所以可以提高性能是因为它的读取效率很高,就像是 CPU 的 L1.L2.L3 缓存一样,级别越高相应的读取速度也会越快. 但也不是什么好处都占,读取速度快了但是它的内存…
 guava cache使用简介 概述 缓存是日常开发中经常应用到的一种技术手段,合理的利用缓存可以极大的改善应用程序的性能. Guava官方对Cache的描述连接 缓存在各种各样的用例中非常有用.例如,当计算或检索值很昂贵时,您应该考虑使用缓存,并且不止一次需要它在某个输入上的值. 缓存ConcurrentMap要小,但不完全相同.最根本的区别在于一个ConcurrentMap坚持所有添加到它直到他们明确地删除元素. 另一方面,缓存一般配置为自动退出的条目,以限制其内存占用.在某些情况下,一个…
https://blog.csdn.net/a67474506/article/details/52608855 Spring定义了org.springframework.cache.CacheManager和org.springframework.cache.Cache接口来统一不同的缓存技术,而SpringBoot为我们提供了自动配置多个CacheManager的实现 在不适用任何额外配置的情况下,默认使用SimpleCacheConfiguration SpringBoot通过spring…
这段时间用到了ehcache和memcache,memcache只用来配置在tomcat中做负载均衡过程中的session共享,然后ehcache用来存放需要的程序中缓存. Guava中的Cache和ehcache其实差不多,只不过Guava并不会对数据进行持久化落盘这种操作.那其实和Map就比较相似了,你放一下static的map好像也可以办到,只不过Guava的cache支持设置最大占用的内存,已经命中统计信息之类的东西. 这里不从怎么创建一个cache,怎么去添加删除开始学习,我们先看ca…
Guava Cache与ConcurrentMap很相似,但也不完全一样.最基本的区别是ConcurrentMap会一直保存所有添加的元素,直到显式地移除.相对地,Guava Cache为了限制内存占用,通常都设定为自动回收元素.在某些场景下,尽管LoadingCache 不回收元素,它也是很有用的,因为它会自动加载缓存. 通常来说,Guava Cache适用于: 你愿意消耗一些内存空间来提升速度. 你预料到某些键会被查询一次以上. 缓存中存放的数据总量不会超出内存容量. Guava Cache…
Guava 源码分析之Cache的实现原理 前言 Google 出的 Guava 是 Java 核心增强的库,应用非常广泛. 我平时用的也挺频繁,这次就借助日常使用的 Cache 组件来看看 Google 大牛们是如何设计的. 缓存 本次主要讨论缓存.缓存在日常开发中举足轻重,如果你的应用对某类数据有着较高的读取频次,并且改动较小时那就非常适合利用缓存来提高性能. 缓存之所以可以提高性能是因为它的读取效率很高,就像是 CPU 的 L1.L2.L3 缓存一样,级别越高相应的读取速度也会越快. 但也…
在应用程序中,数据一般是存在数据库中(磁盘介质),对于某些被频繁访问的数据,如果每次都访问数据库,不仅涉及到网络io,还受到数据库查询的影响:而目前通常会将频繁使用,并且不经常改变的数据放入缓存中,从缓存中查询数据的效率要高于数据库,因为缓存一般KV形式存储,并且是将数据存在“内存”中,从内存访问数据是相当快的. 对于频繁访问,需要缓存的数据,我们一般是这样做的: 1.当收到查询请求,先去查询缓存,如果缓存中查询到数据,那么直接将查到的数据作为响应数据: 2.如果缓存中没有找到要查询的数据,那么…
Guava的缓存是本地缓存,所以我觉得在使用场景上适合那种并非是高一致性的场景中,而且他的实现和ConcurrentHashMap很类似.但是毕竟是缓存嘛,肯定有自动清除的功能.外加一些什么清除策略等等. 我们看guava的cache包下面也就是才十几个类,所以可以说知识一个基础工具,如果要使用到生产环境中去的话,那么还需要我们好好的进一步封装. 最主要的一个类就是LoadingCache,主要的创建方式也是很常见的构造器方式. @Test public void defaultCache(){…
业务背景介绍 对于web应用的限流,光看标题,似乎过于抽象,难以理解,那我们还是以具体的某一个应用场景来引入这个话题吧. 在日常生活中,我们肯定收到过不少不少这样的短信,“双11约吗?,千款….”,“您有幸获得唱读卡,赶快戳链接…”.这种类型的短信是属于推广性质的短信.为什么我要说这个呢?听我慢慢道来. 一般而言,对于推广营销类短信,它们针对某一群体(譬如注册会员)进行定点推送,有时这个群体的成员量比较大,譬如京东的会员,可以达到千万级别.因此相应的,发送推广短信的量也会增大.然而,要完成这些短…
google guava中有cache包,此包提供内存缓存功能.内存缓存需要考虑很多问题,包括并发问题,缓存失效机制,内存不够用时缓存释放,缓存的命中率,缓存的移除等等. 当然这些东西guava都考虑到了. guava中使用缓存需要先声明一个CacheBuilder对象,并设置缓存的相关参数,然后调用其build方法获得一个Cache接口的实例.请看下面的代码和注释,注意在注释中指定了Cache的各个参数. public static void main(String[] args) throw…
Cache Guava的Cache封装的功能比较全面,但是很多地方和设想的不太一样,最明显的就是RemovalListener,它并不是invalid之后就会被调用,因为在调用Cache的invalid的时候,其实并没有真正从内存中删除,只是标记为删除而已,需要通过调用clear或者手工获取的时候,才会进行删除.所以这就要求你在使用的时候要自己实现线程去定时调用clear,或者在需要的时候调用clear,来进行调用. 之所以Cache内部没有实现物理删除是因为需要添加添加一个线程,这个线程可能会…
前言 Guava是Google开源出来的一套工具库.其中提供的cache模块非常方便,是一种与ConcurrentMap相似的缓存Map. 官方地址:https://github.com/google/guava/wiki/CachesExplained 开始构建 一. 添加依赖 <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <…
大家都知道ConcurrentHashMap的并发读写速度很快,但为什么它会这么快?这主要归功于其内部数据结构和独特的hash运算以及分离锁的机制.做游戏性能很重要,为了提高数据的读写速度,方法之一就是采用缓存机制.因此缓存的性能直接影响游戏的承载量和运行流畅度,作为核心基础设施,缓存必须具备以下方面的功能:   1.快速定位数据 2.并发变更数据 3.数据的过期控制与异步写入 4.高并发的情况下缓存数据的一致性   接下来,我就就几篇文章从上述几个方面来讲述下单服务器的缓存实现原理,本文的缓存…
为程序使用内存缓存(MemoryCache) oscache Guava cache 一种解决方法是配一个listener,在里面启动定时器. 简单缓存可以封装LinkedHashMap,因为它是有顺序和有大小限制的.在其基础上加上大小和超时处理. 或者使用Guava的cache封装,这是一个Google提供的java cache,可以像Map一样使用. 在java外部使用cache,便于多个服务器共享数据.比如Redis,Memcached, 客户端页面cache http://blog.re…
Merry Christmas 新的一年要来了,参加工作转眼也快半年了.回顾以往,多逢贵人.不忘初心,感慨良多.祝所有的朋友都能幸福,愿望都可以实现,日子越过越好~ Look Back 作为GH加入北京移动总部的这个项目,遇到不少大神,学东西也确实比学生时代快的多.最钦佩的还是同是GBS的老陈.陈叔细心又不厌其烦,漫不经心地分享很多人生哲理,让人由衷产生“虽不能至,心向往之”的仰慕之意.这就是所谓的人格魅力吧,不是说技术多牛逼,而是技术.地位那么高的情况下,为人还这么谦和. 一代宗师里说:叶里藏…
前言 Map 这样的 Key Value 在软件开发中是非常经典的结构,常用于在内存中存放数据. 本篇主要想讨论 ConcurrentHashMap 这样一个并发容器,在正式开始之前我觉得有必要谈谈 HashMap,没有它就不会有后面的 ConcurrentHashMap. HashMap 众所周知 HashMap 底层是基于 数组 + 链表 组成的,不过在 jdk1.7 和 1.8 中具体实现稍有不同. Base 1.7 1.7 中的数据结构图: 先来看看 1.7 中的实现. 这是 HashM…
前言 Map 这样的 Key Value 在软件开发中是非常经典的结构,常用于在内存中存放数据. 本篇主要想讨论 ConcurrentHashMap 这样一个并发容器,在正式开始之前我觉得有必要谈谈 HashMap,没有它就不会有后面的 ConcurrentHashMap. HashMap 众所周知 HashMap 底层是基于 数组 + 链表 组成的,不过在 jdk1.7 和 1.8 中具体实现稍有不同. Base 1.7 1.7 中的数据结构图: 先来看看 1.7 中的实现. 这是 HashM…
# 建议直接使用的第三方类 Common Lang =>StringUtils =>Validate Guava =>Cache =>Ordering JDK7(LTS JDK8 JDK11...) =>Arrays (除了 binarySearch 这个 bug 函数 =>( low + high )>>>1 或者 low + (high - low)/2) =>Collections ………………………………………………………………………………
原文链接:https://segmentfault.com/a/1190000015726870 前言 Map 这样的 Key Value 在软件开发中是非常经典的结构,常用于在内存中存放数据. 本篇主要想讨论 ConcurrentHashMap 这样一个并发容器,在正式开始之前我觉得有必要谈谈 HashMap,没有它就不会有后面的 ConcurrentHashMap. HashMap 众所周知 HashMap 底层是基于 数组 + 链表 组成的,不过在 jdk1.7 和 1.8 中具体实现稍有…
[视频&交流平台] àSpringBoot视频:http://t.cn/R3QepWG à SpringCloud视频:http://t.cn/R3QeRZc à Spring Boot源码:https://gitee.com/happyangellxq520/spring-boot à Spring Boot交流平台:http://412887952-qq-com.iteye.com/blog/2321532 à Spring Boot Shiro视频:http://t.cn/R3QDMbh…
Java 入门进阶 發表於 2015-04-16 http://xielong.me/2015/04/16/%E6%9C%8D%E5%8A%A1%E7%AB%AF%E5%B7%A5%E7%A8%8B%E5%B8%88%E5%85%A5%E9%97%A8%E4%B8%8E%E8%BF%9B%E9%98%B6Java%E7%89%88/ 前言 欢迎加入我们.这是一份针对实习生/毕业生的服务端开发入门与进阶指南.遇到问题及时问你的 mentor 或者直接问我. 建议: 尽量用google查找技术资料.…
<高可用服务设计之二:Rate limiting 限流与降级> <nginx限制请求之一:(ngx_http_limit_conn_module)模块> <nginx限制请求之二:(ngx_http_limit_req_module)模块> <nginx限制请求之三:Nginx+Lua+Redis 对请求进行限制> <nginx限制请求之四:目录进行IP限制> <分布式限流之一:redis+lua 实现分布式令牌桶,高并发限流> 服务…
原文链接:https://segmentfault.com/a/1190000015726870 前言 Map 这样的 Key Value 在软件开发中是非常经典的结构,常用于在内存中存放数据. 本篇主要想讨论 ConcurrentHashMap 这样一个并发容器,在正式开始之前我觉得有必要谈谈 HashMap,没有它就不会有后面的 ConcurrentHashMap. HashMap 众所周知 HashMap 底层是基于 数组 + 链表 组成的,不过在 jdk1.7 和 1.8 中具体实现稍有…