220525-Guava HashMultimap使用及注意事项

hello,各位大佬上午|中午|下午|晚上|凌晨好,我是一灰灰,今天给大家介绍一个相对基础的知识点 HashMultmap;

guava基本上可以说是java开发项目中,大概率会引入的包,今天介绍的主角是一个特殊的容器 – HashMultmap,可以简单的将它的数据结构理解为Map<K, Set<V>>

那么为什么会突然想到介绍一下它呢,因为昨天刚因为对它理解不够深刻,把它当作了Map<K, List<V>>来使用,结果出了问题;既然如此那就好好盘一盘,反思一下

211110-Guava之Supplier缓存使用实例

使用guava作内存缓存,大多数小伙伴应该都使用过,通过CacheBuilder创建LoadingCache一个kv格式的缓存,如果我们需要缓存的只是一个value呢?

针对这种场景,接下来介绍一种基于Supplier来实现的缓存方式

200214-Guava BloomFilter 使用手册

在jdk中有一个数据结构BitSet,可以用来执行位操作,比如我们常见的统计网站在线人数、pv/uv等;但是当数据样本分布不均,可能导致较大的空间浪费;其次它更适用于正整数类型的判定,针对其他的业务场景,有点薄弱

本文将介绍BloomFilter(布隆过滤器)的相关知识点,以及Guava中BloomFilter的使用姿势

180705-一个简单的幂等工具类实现

一个简单的幂等工具类

在日常的工作中,业务的去重幂等场景属于比较常见的需求,一般来讲简单的幂等工具类可以基于内存或者基于redis进行,本篇简单介绍下,如何使用Guava的缓存来实现一个幂等工具类

180613-GuavaCache返回Null的注意事项

GuavaCache返回Null的注意事项

Guava在实际的Java后端项目中应用的场景还是比较多的,比如限流,缓存,容器操作之类的,有挺多实用的工具类,这里记录一下,在使用GuavaCache,返回null的一个问题

I. 常见使用姿势

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@Test
public void testGuava() {
LoadingCache<String, String> cache = CacheBuilder.newBuilder().build(new CacheLoader<String, String>() {
@Override
public String load(String key) throws Exception {
if ("hello".equals(key)) {
return "word";
}
return null;
}
});

String word = cache.getUnchecked("hello");
System.out.println(word);

System.out.println(cache.getUnchecked("word"));
}

上面是一个非常简单的测试case,需要注意的是,cache.get("word") 的执行,并不如逾期的返回的是null,而是会抛一个异常出来

1
2
3
4
word
com.google.common.cache.CacheLoader$InvalidCacheLoadException: CacheLoader returned null for key word.
at com.google.common.cache.LocalCache$Segment.getAndRecordStats(LocalCache.java:2287)
...

从异常描述能看出,不允许返回null,这一块之前倒是没怎么注意,因此对于null的情况,要么定义一个标记表示不存在,要么在load()方法中主动抛一个异常出来,在使用的时候注意下,通过异常的使用方式,可以如下

1
2
3
4
5
6
7
8
9
10
public class NoVlaInGauvaException extends Exception {
public NoVlaInGauvaException(String msg) {
super(msg);
}

@Override
public synchronized Throwable fillInStackTrace() {
return this;
}
}

说明:为什么重写fillInStackTrace方法

  • 对于这种缓存未命中的情况下,一般而言是不需要关注完整的堆栈信息的,没有数据而已,可以节省一点点性能(当然除非是在高频率的抛出时,才会有表现症状)

其次就是getgetUnchecked的区别了

  • get要求显示处理exception状况
  • getUnchecked 一般是可确认不会有问题的场景,直接调用

II. 其他

1. 一灰灰Bloghttps://liuyueyi.github.io/hexblog

一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

2. 声明

尽信书则不如,已上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

3. 扫描关注

QrCode

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×