使用Java 8的Map.computeIfAbsent()方法来实现缓存的获取与填充。
- computeIfAbsent()方法如果key不存在,会使用给定的mappingFunction计算一个值并插入
- 这里的mappingFunction是productRepository::getProduct,调用产品数据访问层的方法
- 如果key已经存在,直接从缓存cache获取值
public void coolCache() //一条语句实现cache的常用模式
{
getProductAndCacheCool(1L);
getProductAndCacheCool(100L);
System.out.println(cache);
assertThat(cache.size(), is(1));
assertTrue(cache.containsKey(1L));
}
- 先从缓存获取,缓存没有再查询数据库
- 查询到后放入缓存
- 后续重复查询直接从缓存获取这种缓存+延迟加载的模式可以有效提升系统性能,避免重复查询数据库。同时代码层面也做到了解耦,computeIfAbsent内部自动处理缓存逻辑,使用方只要直接调用get数据即可。
学习:Java 业务开发常见错误 100 例学习笔记