第一部分来自此链接:

How does Guava expire entries in its CacheBuilder?

我将重点关注expireAfterAccess,但expireAfterWrite的过程几乎完全相同.就机制而言,当您在CacheBuilder中指定expireAfterAccess时,缓存的每个段都按照从最近访问到最近访问的顺序维护条目的链表访问队列.高速缓存条目实际上是链接列表中的节点,因此当访问条目时,它将自己从访问队列中的旧位置移除,并将其自身移动到队列的末尾.

invalidate应该立即删除条目 – 不等待另一个查询 – 并且应该强制在下一个查询到该键的时候重新加载该值.

cleanUp:执行缓存所需的任何挂起维护操作.究竟执行哪些活动 – 如果有的话 – 是依赖于实现的.

显式删除

您可以随时明确地使缓存条目无效,而不是等待条目被驱逐.这可以做到:

individually, using Cache.invalidate(key)

in bulk, using Cache.invalidateAll(keys)

to all entries, using Cache.invalidateAll()

什么时候清理会发生?

使用CacheBuilder构建的缓存不会“自动”执行清理和逐出值,或者在值到期后立即执行或逐出任何类型.相反,它在写入操作期间执行少量维护,或者在写入很少的情况下偶尔执行读取操作.

原因如下:如果我们想要连续执行缓存维护,我们需要创建一个线程,其操作将与共享锁的用户操作竞争.此外,某些环境会限制线程的创建,这会使CacheBuilder在该环境中无法使用.

相反,我们把选择放在你手中.如果您的缓存是高吞吐量,那么您不必担心执行缓存维护以清理过期的条目等.如果您的缓存很少写入并且您不希望清除阻止缓存读取,您可能希望创建自己的维护线程,定期调用Cache.cleanUp().

如果要为很少写入的高速缓存安排常规高速缓存维护,只需使用ScheduledExecutorService安排维护.

java中cleanup的使用_java – google guava缓存invalidateAll()和cleanUp()之间的区别相关推荐

  1. java中的for循环里面创建对象和for循环外面创建对象之间的区别

    问题描述: 其实就是我在for循环外面场景对象.想着可以节省内存,可是最终返回list的对象都是最后一个对象对应的数据,代码如下: List<SelectSelfTestReportVo.Con ...

  2. java获取本机ipv4,并使用Google Guava 缓存

    java写个util,获取本机ip,并使用Google Guava 缓存起来 四个方法: 获取本机ipv4 ip转16进制 16进制转ip 校验ip 首先,Google Guava使用的maven配置 ...

  3. Google Guava缓存实现接口的限流

    一.项目背景 最近项目中需要进行接口保护,防止高并发的情况把系统搞崩,因此需要对一个查询接口进行限流,主要的目的就是限制单位时间内请求此查询的次数,例如1000次,来保护接口. 参考了 开涛的博客聊聊 ...

  4. java中list去除空值_Java –从列表中删除所有空值

    java中list去除空值 介绍: 在本文中,我们将学习如何使用普通的Java,Java 8 lambda表达式和某些第三方库从Java 列表中删除空值 . 所以,让我们开始吧! 从Java中的 让我 ...

  5. java中什么是空指针异常_JAVA中的空指针异常如何处理?

    你这个问题的解决 问题定位: 在堆栈异常信息的第一行就可以定位到是哪里出了空指针,倘若这里不是你写的类,可以往下翻一下,找到你写的类,就是这里出现的空指针. 问题解决: 对一个空对象调用里面的方法或者 ...

  6. 如何在Java中验证电话号码(正则表达式+ Google libphonenumber)

    关于如何在不同国家(例如美国,美国)使用Java验证电话号码的快速指南. 带有正则表达式和Google libphonenumber API的示例程序. 1.简介 在本教程中,我们将学习如何在java ...

  7. java中的垃圾收集器_Java中的垃圾收集

    java中的垃圾收集器 Garbage collection in java is one of the advance topic. Java GC knowledge helps us in fi ...

  8. java中注解的使用_java中注解的使用

    使用过ssh框架的人一定也使用过注解,尤其是在spring框架中,注解可谓是spring容器和AOP编程的重要环节.注解就是用于修饰类.全局变量.方法.参数或局部变量的接口,java中规定,注解的使用 ...

  9. java中组件与容器_java中的容器组件和非容器组件

    1.java使用到的图形类主要在java.awt 与javax.swing包中. 2.java.awt 与 javax.swing包的区别: ① java.awt中使用的图形类都是依赖于系统的图形库的 ...

  10. java中事件监听_Java中的事件监听机制

    鼠标事件监听机制的三个方面: 1.事件源对象: 事件源对象就是能够产生动作的对象.在Java语言中所有的容器组件和元素组件都是事件监听中的事件源对象.Java中根据事件的动作来区分不同的事件源对象,动 ...

最新文章

  1. 用txt做数据源和winfrom textbox输入智能提示
  2. python之celery简单使用
  3. Nginx —— nginx的命令行控制(nginx的启动与停止、重载配置文件、回滚日志文件、平滑升级等操作)
  4. 中文乱码各个浏览器的处理
  5. Java方法中的参数太多,第7部分:可变状态
  6. Linux 命令之 kill -- 杀死进程
  7. struts json序列化遇上replaceAll就出问题
  8. 帧率ffmepg 摄像头_监控摄像头的硬盘内存选择方法
  9. Linux笔记(五) - 用户管理命令
  10. IDM下载资源提示无法连接到服务器,代理,防火墙
  11. Windows下连接Linux的ssh工具有哪些
  12. 谷歌浏览器如何截全屏长图,超级方便实用
  13. python球的体积公式_鬼斧神工:求n维球的体积
  14. 您的系统存在未授权的Bluetooth适配器,拔除或禁用该设备(蓝牙问题)
  15. 在UNIX \ Linux终端中的可视化磁盘空间和磁盘使用情况小工具 - Vizex
  16. windows7图形界面远程centos6.5
  17. 【原创】360购物小蜜的背后:探推荐引擎初探
  18. ## 大一java课程设计_航班查询系统(我是小白)
  19. 利用LruCache为GridView异步加载大量网络图片完整示例
  20. 79页智慧应急指挥平台1 6 N体系建设方案

热门文章

  1. python假设检验
  2. Arduino学习(九): 写一个Arduino扩展库:音乐播放库,并实现跨平台
  3. 身份证阅读器二次开发说明
  4. IT 工作中常用的英语单词
  5. 微型计算机常用显示器,专业显示器只买某卓?那是你没见识过这款专业显示器的厉害...
  6. Android图片拼接
  7. Ubuntu 建立局域网
  8. Windows 禁用U盘
  9. 我的网关、子网掩码、DNS1、DNS2是什么
  10. 51单片机游戏(推箱子)