Guava缓存报错returned null for key

Guava

首先,Guava是什么?其实也就是一个Java的第三方工具,有集合、缓存、字符串等功能;

问题

com.google.common.cache.CacheLoader$InvalidCacheLoadException: CacheLoader returned null for key XXXX.

    at com.google.common.cache.LocalCache$Segment.getAndRecordStats(LocalCache.java:2348)
    at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2318)
    at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2280)
    at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2195)
    at com.google.common.cache.LocalCache.get(LocalCache.java:3934)
    at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3938)
    at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4821)
    at com.google.guava.cache.GuavaRefreshWhenCacheIsNullTest.testGuavaRefreshWhenCacheIsNullThrowsException(GuavaRefreshWhenCacheIsNullTest.java:49)

分析问题,由于使用了refreshAfterWrite的功能,如果key取出来为空则会报错,这个功能一个重要的工作就是在2次获取同一个key时,且key到了该refresh的时间,就会后台异步刷新,如果刷新这个key得到了新值,就会覆盖key对应的旧值;如果获取到的key为null,不知道是该刷新还是有异常

解决问题

  1. 可以捕获 CacheLoader$InvalidCacheLoadException 这个异常,return null
  1. 避免传入缓存null值,使用Optional等类,在key传入之前,就避免掉value
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 缓存 范例 适用性 缓存在很多场景下都是相当有用的。例如,计算或检索一个值的代价很高,并且对同样的输入需要不止一次...
    小鸡在路上阅读 3,281评论 0 2
  • 范例 适用性 缓存在很多场景下都是相当有用的。例如,计算或检索一个值的代价很高,并且对同样的输入需要不止一次获取值...
    爱情小傻蛋阅读 686评论 0 2
  • com.google.common.cache 1、背景 缓存,在我们日常开发中是必不可少的一种解决性能问题的方法...
    拾壹北阅读 22,481评论 0 25
  • 在上篇文章01 初识缓存-了解缓存中简单了介绍了下缓存的历程以及几种常见的技术进行简单介绍,本着学习的目的本节针对...
    花神子阅读 804评论 0 4
  • 6点起床洗漱后进入扣扣视频秀对练梦想生意沟通--一种姿态沟通我实战练习后听新天地和赢在奋斗两位老师点评收获很多。 ...
    梦想917阅读 374评论 0 2