一头扎进caffeine cache的大坑

caffeine号称性能做好的本地cache,最近想实践一下学的东西,写个小demo,就用caffeine作为本地缓存缓存一下用户的token,然后配置大概如下:

 private static final Cache<String, String> userTokenCache = Caffeine.newBuilder()// 数量上限.maximumSize(10000)// 过期机制.expireAfterAccess(30, TimeUnit.MINUTES)// 弱引用key.weakKeys()// 弱引用value.weakValues().build();@Bean("userTokenCache")public Cache<String,String> userTokenCache(){return userTokenCache;}

测试的时候发现当前请求生成token放入userTokenCache后 ,下一个请求根据同样的token拿不到缓存数据,最开始怀疑是多线程共享了userTokenCache 这个变量,导致线程1放入的数据线程2无法获取到,后来把final 关键字换成volatile关键字后发现依旧不行。最后突然发现这段代码(我承认这个Caffeine的初始化代码是抄来的):

             // 弱引用key.weakKeys()// 弱引用value.weakValues()

这个的话是把key和value都设置成弱引用,弱引用在JVM的下一次GC中会被回收。于是打开GC日志输出,在日志中发现了一行:

[GC (Allocation Failure)  82226K->20184K(208896K), 0.0064046 secs]

猜测是这个问题,于是将

             // 弱引用key.weakKeys()// 弱引用value.weakValues()

删除,再次测试,可以获取到token了,已经80%确定是这个问题了。后来为了论证这个问题,决定在放缓存前后打印系统时间戳,GC日志中也输出时间戳,做一下对比。但是只获取到了GC时间为相对于系统启动的时间,而没有获取到GC的系统时间戳,这个问题只停留在了80%的确定上,如果哪路高手看到了这个问题,还请留下验证方法,把这个问题100%证明一下。

一头扎进caffeine cache的大坑相关推荐

  1. 放弃考研一头扎进春招,却磕得“头破血流”,这么拼值吗?

    放弃考研一头扎进春招,却磕得"头破血流",这么拼值吗? 一.在校情况 二.遇见拼客 三.相关面经 L同学-广东工业大学16级电子信息工程专业-拼客学院第20期<全栈Linux ...

  2. python自动化框架2019_《一头扎进》系列之Python+Selenium自动化测试框架实战篇6 - 价值好几K的框架,呦!这个框架还真牛叉哦!!!...

    1. 简介 本文开始介绍如何通过unittest来管理和执行测试用例,这一篇主要是介绍unittest下addTest()方法来加载测试用例到测试套件中去.用addTest()方法来加载我们测试用例到 ...

  3. 一头扎进Node系列 - 目录

    前言 本系列是属于初级教程.博主我也还只是一个node的新兵蛋子,想通过学习官网的API文档,慢慢的打好Node基础.当然后期这系列文档会慢慢完善,并且会添加一些项目实战中遇到的一些问题以及解决方案! ...

  4. 一头扎进Shiro-自定义Realm

    在一头扎进Shiro-集成Web之前的博客,我们都是用shiro.ini保存用户.角色.权限信息,本篇文章我们将这些信息保存到数据库,通过自定义Realm完成身份验证和权限验证. 去掉用户.角色.权限 ...

  5. 一头扎进Mysql视频教程 + 源码

    [@2015-4-8] 记录一下自己的脚印:看到一个一头扎进Mysql视频教程 + 源码果断下载下来,看了看比较到位, 下载地址:http://www.xiaomengku.com/topic?id= ...

  6. 一头扎进SpringBoot视频教程(附源码与文档)

    目录:/099 一头扎进SpringBoot视频教程(附源码与文档) ┣━━<一头扎进SpringBoot>第八讲.mp4 ┣━━<一头扎进SpringBoot>第八讲源码及文 ...

  7. 一头扎进Maven3 (一)

    本系列博客将学习Maven项目管理工具,使用Maven管理jar包 一头扎进Maven3 (一):Maven安装与配置 文档结构 Maven简介 Maven安装与配置 Maven Hello Worl ...

  8. 一头扎进Maven3 (二)

    本系列博客将学习Maven项目管理工具,使用Maven管理jar包 一头扎进Maven3 (二):在 Eclipse 中使用 Maven 文档结构 m2eclipse 插件安装 在 Eclipse 中 ...

  9. 一头扎进Shiro-身份认证

    在<一头扎进Shiro-HelloWorld>中介绍了将用户信息保存在Subject认证主体,用shiro.ini模拟数据库记录用户名.密码信息完成验证的过程,这篇文章我们将讲解如何通过R ...

最新文章

  1. 高级网络配置《 bond team桥接 》的建立
  2. 解决.Net Core跨域问题
  3. php 去除首位字符_php中如何去除字符串首尾字符?
  4. Guidance Package Manager button doesn’t appear in the VS menu
  5. SAP IQ09 可以批量查询序列号数据
  6. armv8 汇编 绝对地址赋值_ARMv8带来的变化
  7. php v9 分页静态,PHPCMS V9自定义栏目伪静态实现方法(列表页/分页/内容页)
  8. spring-cloud导入eclipse时,@slf4j注解为什么找不到log变量
  9. [Eclipse]GEF入门系列(序)
  10. 解引用NULL为什么会导致程序挂死?
  11. c 程序设计语言第1 3部分,《C程序设计语言(第2版新版)典藏版》 —1.3 for语句...
  12. 在ubuntu中使用cv2.imshow()报错 No protocol specified qt.qpa.xcb: could not connect to display :0
  13. 本以为用的MyBatis框架就万无一失了,没想到还是被黑客注入了,我真的无语了!...
  14. linux中使用网易云音乐
  15. 算法分析与设计:棋盘覆盖问题(分治法)
  16. JavaScript成语消消乐
  17. 关于《训练指南》中的“翻棋子游戏”
  18. python导入文件夹下所有包_python 通过文件夹导入包的操作
  19. 曲线积分于曲面积分(后篇 曲面积分-坐标曲面积分-高斯公式-斯托克斯公式)
  20. 中华成语库 v1.1 下载

热门文章

  1. 2022双非计算机保研经历
  2. linux设置文件权限为可执行
  3. 靠!龙书第二版两天前上架了
  4. 取消select的默认样式的向下箭头和设置select默认字样
  5. next和nextOrSame,previous和previousOrSame区别
  6. OpenWrt之quilt打补丁
  7. python学习笔记之daydayup
  8. python下载电影天堂_【PY】没有电影看?来教你用Python爬取电影天堂最新电影!...
  9. GA/T 1400协议 - 注册注销流程
  10. ctf-BugkuCTF-misc