Guava Cache

Guava Cache提供内存中的数据缓存,提高访问效率。适用于内存空间换取速度、预测多查询键及总数据量不超过内存容量的场景。通过CacheBuilder构建,设置最大存储数量和过期时间,实现自动淘汰和过期清理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概述

      Guava Cache是在内存中缓存数据,相比较与数据库或redis存储,访问内存中的数据会更加高效。合理的利用缓存可以极大的改善应用程序的性能。

二、应用场景

  1. 愿意消耗一些内存空间来提升速度。
  2. 预料到某些键会被多次查询。
  3. 缓存中存放的数据总量不会超出内存容量。

三、用法

  1. 添加依赖
    <dependency>
       <groupId>com.google.guava</groupId>
       <artifactId>guava</artifactId>
       <version>23.0</version>
    </dependency>

     

  2. 创建

         通过CacheBuilder构建一个缓存对象,CacheBuilder类采用builder设计模式,它的每个方法都返回CacheBuilder本身,直到builder方法被调用。

Cache<String,String> cache = CacheBuilder.newBuilder().build();
cache.put("key","value");
System.out.println(cache.getIfPresent("key"));

     3.设置最大存储

          在构建缓存对象时,指定缓存最大存储数量。当Cache的数量达到最大值后再调用put方法向其中添加对象,Guava会从其删除一个一条,在存储新的Key。

       Cache<Object, Object> cache = CacheBuilder
                            .newBuilder()
                            .maximumSize(5)
                            .build();
        cache.put("1", "1");
        cache.put("2", "2");
        cache.put("3", "3");
        cache.put("4", "4");
        cache.put("5", "5");
        cache.put("6", "6");

        System.out.println("key=1:"+cache.getIfPresent("1"));
        System.out.println("key=2:"+cache.getIfPresent("2"));
        System.out.println("key=3:"+cache.getIfPresent("3"));
        System.out.println("key=4:"+cache.getIfPresent("4"));
        System.out.println("key=5:"+cache.getIfPresent("5"));
        System.out.println("key=6:"+cache.getIfPresent("6"));


      结果:
        key=1:null
        key=2:2
        key=3:3
        key=4:4
        key=5:5
        key=6:6

经过多次测试,应该是按顺序删除。

         4.设置过期时间

                在构建Cache对象时,可以通过CacheBuilder类的expireAfterAccess和expireAfterWrite两个方法为缓存中的对象指定过期时间,过期的对象将会被缓存自动删除。

                expireAfterWrite表示写入后存在多长时间;

                expireAfterAccess表示多久没有被访问后过期。

        Cache<Object, Object> cache = CacheBuilder
                .newBuilder()
                .maximumSize(5)
                .expireAfterWrite(1, TimeUnit.MINUTES) //缓存在一分钟后会过期
                .build();

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值