[Google Guava]学习--缓存cache】的更多相关文章

适用性 缓存在很多情况下非常实用.例如,计算或检索一个值的代价很高,并且对同样的输入需要不止一次获取值的时候,就应当考虑使用缓存. Guava Cache与ConcurrentMap很相似,但也不完全一样.最基本的区别是ConcurrentMap会一直保存所添加的元素,直到显式的移除:Guava Cache为了限制内存的占用,通常都是设定为自动回收元素.在某些场景下,尽管LoadingCahe不回收元素,但是它还是很有用的,因为它会自动加载缓存. Guava Cache适用场景: 你愿意消耗一部…
谷歌Guava缓存 Guava介绍 Guava是Google guava中的一个内存缓存模块,用于将数据缓存到JVM内存中.实际项目开发中经常将一些公共或者常用的数据缓存起来方便快速访问. Guava Cache是单个应用运行时的本地缓存.它不把数据存放到文件或外部服务器.如果不符合需求,可以选择Memcached.Redis等工具. 小案例 pom.xml添加guava依赖 <?xml version="1.0" encoding="UTF-8"?>…
Guava的缓存是本地缓存,所以我觉得在使用场景上适合那种并非是高一致性的场景中,而且他的实现和ConcurrentHashMap很类似.但是毕竟是缓存嘛,肯定有自动清除的功能.外加一些什么清除策略等等. 我们看guava的cache包下面也就是才十几个类,所以可以说知识一个基础工具,如果要使用到生产环境中去的话,那么还需要我们好好的进一步封装. 最主要的一个类就是LoadingCache,主要的创建方式也是很常见的构造器方式. @Test public void defaultCache(){…
Google Guava是什么东西?首先要追溯到2007年的“Google Collections Library”项目,它提供对Java 集合操作的工具类.后来Guava被进化为Java程序员开发必备的工具.Guava可以对字符串,集合,并发,I/O,反射进行操作. 在软件开发过程中,我们自认为可以什么都能做,我们本能的去写自己的类库来处理一些日常的问题.当然,我们认为自己写的代码是坚不可摧的,并且是经过单元测试的.实际上,我们没有我们认为的那么聪明,换句话说,它不在于你有多聪明,而是在于编写…
目录 1.问题场景及说明 2.Redis 缓存是深拷贝 3.Guava本地缓存直接获取则是浅拷贝 4.如何实现Guava获取本地缓存是深拷贝? 1.问题场景及说明 系统中同时使用 Redis 缓存和 Guava本地缓存.用 Guava 缓存将 Redis 缓存包了一层.可以提升效率,但是也会引出一些问题. 问题:同一个本地缓存Map,获取到的值有时会不一致. 不同机器可能不一致,同一机器也可能不一致.很神奇,但是数据库里都是对的. 后来发现,因为有一个请求会对该缓存进行remove操作,导致缓存…
Guava提供了一个新集合类型Multiset,它可以多次添加相等的元素,且和元素顺序无关.Multiset继承于JDK的Cllection接口,而不是Set接口. Multiset主要方法介绍: add(E element) :向其中添加单个元素 add(E element,int occurrences) : 向其中添加指定个数的元素 count(Object element) : 返回给定参数元素的个数 remove(E element) : 移除一个元素,其count值 会响应减少 re…
Preconditions类是一组静态方法用来验证我们代码的状态.Preconditons类很重要,它能保证我们的代码按照我们期望的执行,如果不是我们期望的,我们会立即得到反馈是哪里出来问题,现在我们使用Preconditions来保证我们代码的行为,并且对调试也非常方便. 当然,你也可以自己写预处理的代码,就像下面一样: if (someObj == null) { throw new IllegalArgumentException(" someObj must not be null&qu…
BiMap提供了一种新的集合类型,它提供了key和value的双向关联的数据结构. Bimap 能非常方便的实现map<key,value>的转置要求,也就是value变为key,key变为value; 保证值是唯一的,因此返回Set而不是普通的Collection 注:在BiMap中,如果你想把键映射到已经存在的值,会抛出IllegalArgumentException异常.如果对特定值,你想要强制替换它的键,请使用 BiMap.forcePut(key, value). 测试类: impo…
每个有经验的Java程序员都在某处实现过Map<K, List<V>>或Map<K, Set<V>>,并且要忍受这个结构的笨拙. 假如目前有个需求是给两个年级添加5个学生,并且统计出一年级学生的信息: public class MultimapTest { class Student { String name; int age; } private static final String CLASS_NAME_1 = "一年级"; pr…
Guava 提供了一系列针对Object操作的方法. 1. toString方法 为了方便调试重写toString()方法是很有必要的,但写起来比较无聊,不管如何,Objects类提供了toStringHelper方法,它用起来非常简单,我们可以看下面的代码: public class Book implements Comparable<Book> { private Person author; private String title; private String publisher;…