一条语句实现cache的常用模式

169 阅读1分钟

使用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 例学习笔记