缓存篇(一)- Guava

本文介绍了Guava缓存的背景、使用场景、案例分析及注意事项。Guava提供了一种方便的本地内存缓存解决方案,支持访问和写入后的失效策略,适用于对数据实时性要求不高的场景。

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

接下来几篇给大家分享一下缓存相关的内容,包括但不限于Guava,JetCache和Spring Cache等。

      Guava产生的背景

      最常见最简单的方式就是我们使用HashMap或者ConcurrentHashMap,在内存中缓存数据,通过key存放value,通过key读取我们需要的value数据。但是这里存在一个问题,value是会过期的。所以我们还得需要设置一个定时器,根据业务和数据变化要求,每隔一段时间进行缓存更新,保证读取的是更新的value。另外如果需要对缓存的数据做更精准的失效控制,还得自己写一套回收策略的代码,这相对来说是很麻烦的。但是Guava已经帮你考虑到这些了。

     Guava的使用场景

     Guava也并不是万能的,在使用之前我们先说说使用场景,看看业务中使用Guava缓存是否能够解决问题。

     场景1:Guava属于本地内存缓存,非分布式缓存,适用于对数据实时性不高,但也有一定要求。所以使用Guava就需要牺牲一定的内存空间。

     场景2:本地缓存至少会查询到1次,保证Guava起码是能够真正起到缓存加速作用的。

 

     Guava案例分析

    @Test
    public void testCacheUse() throws Exception{
        LoadingCache<String, SkuCache> loadingCache = CacheBuilder.newBuilder()
                .expireAfterAccess(10, TimeUnit.SECONDS)
                .build(new CacheLoader<String, SkuCache>() {
                    @Override
                    public SkuCache load(String key) {
                        SkuCache skuCache = new SkuCache();
                        skuCache.setSkuCode(key);
                        skuCache.setSkuId(key);
                        skuCache.setRealQuantity(100L);
                        return skuCache;
                    }
                });

        SkuCache skuCache = loadingCache.get("sku");
        System.out.println(skuCache);
        skuCache.setSkuCode(skuCache.getSkuCode() + "-modified");
        SkuCache skuCache2 = loadingCache.get("sku");
        System.out.println(skuCache2);

    }

    @Data
    public class SkuCache {
        private String skuId;
        private String skuCode;
        private Long realQuantity;
    }

 

这里我们定义了缓存对象SkuCache,希望前端页面在查询热点sku的信息时,起到缓存加速的效果。

首先通过CacheBuilder.newBuilder()创建一个CacheBuilder对象,CacheBuilder提供了两个失效策略expireAfterAccess和expireAfterWrite,分别代表访问一段时间后失效和写入一段时间后失效。当然,如果你想让缓存每隔一段时间自断刷新,可以使用refreshAfterWrite方法。这里不做过多的测试。

Guava使用的注意事项

Guava的缓存是在内存中实现,所以在同一段未失效期内,一个缓存对象都是在一个内存中存在,如果取出来之后,设置了新值, 那么Guava缓存中的值也将改变。正如测试案例中的操作,将会输出一下内容。

SkuCache(skuId=sku, skuCode=sku, realQuantity=100)
SkuCache(skuId=sku, skuCode=sku-modified, realQuantity=100)

这里只是给大家简单介绍了一下Guava的简单用法,但是Guava除了缓存之外,还有很多强大方便的功能,例如集合、并发工具和IO等等,有时间大家可以去用用,会发现你的代码会简单易懂很多。正如,磨刀不误砍材工,只有把基础的信息掌握,用的时候才能临危不惧。

 

参考文章:http://ifeve.com/google-guava-cachesexplained/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值