guava的两种本地缓存策略

yizhihongxing

guava的两种本地缓存策略

Guava是一个基于Java的开源库,提供了一些常用的工具类,其中包括了本地缓存的实现。Guava缓存可以快速地添加逐出策略、提供统计信息和异步加载等功能,可用于提高应用程序的性能。

在Guava缓存中,有两种本地缓存策略:基于大小的缓存和基于时间的缓存。

基于大小的缓存

基于大小的缓存指使用缓存条目的数量或缓存的总大小作为驱逐策略的标准。可以通过使用 CacheBuilder.maximumSize()CacheBuilder.maximumWeight() 来指定缓存中最大可以存储多少条目或容量大小,超出这个阈值后的缓存条目将会被逐出。

举个例子,在下面的代码中,我们创建了一个缓存,最多可以存储100个条目:

Cache<String, String> cache = CacheBuilder.newBuilder()
        .maximumSize(100)
        .build();

当存储的条目数量超过100个时,缓存中最老的条目将被逐出,以为新的条目腾出空间。

基于大小的缓存通常适用于一些内存受限的场景,并且具有优美的 LRU 算法,比如优先逐出近期不使用的缓存条目,将空间空出来以继续存储新条目。

基于时间的缓存

基于时间的缓存指定时长为驱逐策略的标准。可以通过使用 CacheBuilder.expireAfterWrite()CacheBuilder.expireAfterAccess() 来指定缓存条目存活的时间。

expireAfterWrite() 方法将在缓存条目写入缓存后开始计时,当超过指定的时间后,该条目将被自动逐出。例如,下面的代码将创建一个缓存条目被存活5分钟后被逐出:

Cache<String, String> cache = CacheBuilder.newBuilder()
        .expireAfterWrite(5, TimeUnit.MINUTES)
        .build();

expireAfterAccess() 方法将在缓存条目被访问时开始计时,当超过指定的时间后,该条目将被自动逐出。例如,下面的代码将创建一个缓存条目被最后一次访问5分钟后被逐出:

Cache<String, String> cache = CacheBuilder.newBuilder()
        .expireAfterAccess(5, TimeUnit.MINUTES)
        .build();

基于时间的缓存通常适用于那些不需要持久存储的数据,比如一些中间结果或者是非常快速变化的数据,避免数据被长时间存留在缓存中。

总之,Guava是一个非常优秀的缓存框架,其提供了灵活的缓存策略,可以根据不同的场景选择不同的缓存策略来满足应用的要求。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:guava的两种本地缓存策略 - Python技术站

(0)
上一篇 2023年3月28日
下一篇 2023年3月28日

相关文章

  • DIV多层嵌套margin-top的BUG问题

    DIV多层嵌套margin-top的BUG问题攻略 问题描述 在HTML和CSS中,当多个DIV元素嵌套在一起,并且每个DIV元素都设置了margin-top属性时,可能会出现一个BUG。这个BUG会导致内层DIV元素的margin-top属性不会像预期的那样应用于外层DIV元素的底部,而是应用于外层DIV元素的顶部。 解决方案 为了解决这个问题,我们可以使…

    other 2023年7月28日
    00
  • ES6 class类链式继承,实例化及react super(props)原理详解

    下面我将对“ES6 class类链式继承,实例化及react super(props)原理详解”的攻略进行详细讲解。 ES6 class类链式继承 什么是ES6 class类? ES6 class是JavaScript中一种新的类声明语法,它提供了面向对象编程的一些基础特性,使得代码更易理解和维护。 什么是类链式继承? 类链式继承是面向对象编程中的一种常见继…

    other 2023年6月27日
    00
  • PPS后缀修改成PPT格式?WINRAR软件轻松搞定

    PPS后缀修改成PPT格式?WINRAR软件轻松搞定攻略 如果你想将PPS(PowerPoint幻灯片演示)文件后缀修改为PPT(PowerPoint演示文稿)格式,你可以使用WINRAR软件来轻松完成。下面是详细的攻略: 步骤一:下载和安装WINRAR软件 首先,你需要下载并安装WINRAR软件。你可以在WINRAR官方网站(https://www.win…

    other 2023年8月5日
    00
  • Android实战–电话拨号器

    Android实战–电话拨号器的完整攻略 在Android应用程序中,我们可以使用电话拨号器来拨打电话。本文将介绍如何在Android应用程序中实现电话拨号器,包括权限申请、UI设计、拨号功能实现等。 1. 权限申请 在Android应用程序中,我们需要申请CALL_PHONE权限才能拨打电话。在AndroidManifest.xml文件中添加以下代码: …

    other 2023年5月5日
    00
  • springboot jar包外置配置文件的解决方法

    当使用Spring Boot时,我们需要在应用程序中使用配置文件来存储应用程序运行所需的变量和参数。直接将配置文件放在项目中不是一个很好的选择,因为这样可能会导致困惑和管理上的麻烦。 另一方面,将配置文件外置到文件系统或云存储中则可以提高应用程序的可维护性和安全性。下面是Spring Boot Jar包外置配置文件的解决方法的攻略: 步骤1:在Spring …

    other 2023年6月25日
    00
  • 解析C#中的私有构造函数和静态构造函数

    下面就是解析C#中的私有构造函数和静态构造函数的攻略。 解析C#中的私有构造函数和静态构造函数 在C#中,构造函数是用于初始化类实例的方法,通常来说,我们可以在类中定义一个公共的构造函数,用于在类外部实例化对象。但有时候,为了让类的使用更加灵活,我们需要定义私有构造函数和静态构造函数。 私有构造函数 私有构造函数是指只能在类内部调用的构造函数。在C#中,我们…

    other 2023年6月26日
    00
  • vue修改打包配置如何实现代码打包后的自定义命名

    Vue修改打包配置实现代码打包后的自定义命名攻略 要实现Vue项目打包后的自定义命名,可以按照以下步骤进行操作: 打开项目根目录下的vue.config.js文件(如果没有该文件,可以手动创建)。 在vue.config.js文件中添加以下配置: javascript module.exports = { configureWebpack: { output…

    other 2023年10月13日
    00
  • ASP获取数据库表名、库名、字段名的方法

    获取数据库表名、库名、字段名是网站开发中常见的需求。在ASP中,可以通过ADO对象的属性和方法来实现。下面是具体的完整攻略: 获取数据库库名 要获取一个数据库的库名,在连接数据库的字符串(ConnectionString)中加入“Initial Catalog=数据库名”即可。然后,打开连接,通过Connection对象的属性Catalog获取库名。 示例代…

    other 2023年6月26日
    00
合作推广
合作推广
分享本页
返回顶部