Google-LoadingCache本地缓存

本文介绍了Google提供的LoadingCache作为本地缓存的使用,通过Maven引入并展示了简单的示例代码,如设置最大容量和缓存更新策略。作者强调在某些场景下,本地缓存比分布式缓存(如Redis)更适用,因为可以避免网络IO并减少对Redis单线程模型的依赖。

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

最新在项目中发现一个LoadingCache类。是Google提供的一种本地缓存。挺好使的。分享一下。

Maven:

<dependency>
    <groupId>com.github.ben-manes.caffeine</groupId>
    <artifactId>caffeine</artifactId>
    <version>2.6.0</version>
</dependency>

Demo: 

@Service
public class UserInfoSeviceImpl implements UserInfoService {

    private static final String DEPARTMENT_CACHE_KEY = "all-department-info";

    @Autowired
    private DepartmentDao departmentDao;

    /**
     * 本地缓存
     */
    private LoadingCache<String, List<DepartmentEntity>> loadingCache = Caffeine.newBuilder().maximumSize(10)
        .refreshAfterWrite(5, TimeUnit.MINUTES).build(key -> departmentDao.queryDepartmentAll());

    public List<DepartmentEntity> getDepartmentAll() {
        return loadingCache.get(DEPARTMENT_CACHE_KEY);
    }
}

使用起来非常简单方便。两行代码。简单解释一下哈。

.maximumSIze(10):指定本地缓存的键值对是10对。

.refreshAfterWrite(5, TimeUnit.MINUTES):缓存5分钟。

.build():定义缓存失效后,刷新缓存的逻辑。

loadingCache.get(DEPARTMENT_CACHE_KEY):获取缓存数据,如果没有则会调用build方法刷新缓存,并放入本地缓存。key:DEPARTMENT_CACHE_KEY。

心得:

1、为什么不放分布式缓存redis里呢?

其实,不要一想到缓存就说放到Redis里的。单纯就这点东西,加个Redis有点大材小用了。放到本地内存中足够。

而且需要注意一点。放到Redis里,与Redis之间的通信还是需要网络IO的。由于Redis是单线程数据模型,其实并发比较多的场景下,也会成为瓶颈滴。如果内存足够并且不需要依赖Redis的一些特性,本地缓存足够。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值