ITPub博客

首页 > 应用开发 > Java > Java本地缓存,完胜 Guava !

Java本地缓存,完胜 Guava !

Java 作者:ITPUB社群 时间:2023-07-11 13:56:24 0 删除 编辑

来源:开源小分队

大家好,我是爱学习的了不起!

在项目中用到的除了分布式缓存,还有本地缓存,例如:Guava、Encache,使用本地缓存能够很大程度上提升程序性能,本地缓存是直接从本地内存中读取,没有网络开销。

今天给大家介绍一个高性能的 Java 缓存库 -- Caffeine 。

简介

Caffeine是基于Java8 的高性能缓存库,借鉴了 Guava 和 ConcurrentLinkedHashMap 的设计经验,拥有更高的缓存命中率和更快的读写速度。

性能比Guava更强

功能特性

  • 基于时间的回收策略:包括写入时间和访问时间
  • 基于容量的回收策略:一种是基于容量大小,一种是基于权重大小,两者只能取其一。
  • 基于数量回收策略
  • 基于引用的回收策略:GC并且内存不足时,会触发软引用回收策略;GC并且内存不足时,会触发软引用回收策略。
  • value自动封装弱引用或软引用
  • 缓存访问统计

使用方式

引入依赖

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

配置缓存类

@Configuration
public class CacheConfig {

    @Bean
    public Cache<String, Object> caffeineCache() {
        return Caffeine.newBuilder()
                // 设置了1分钟的写过期
                .expireAfterWrite(60, TimeUnit.SECONDS)
                // 初始的缓存空间大小
                .initialCapacity(100)
                // 缓存的最大条数
                .maximumSize(1000)
                .build();
    }

}

这种方式的弊端是所有的缓存都放在一起,最好的使用方式是每一个缓存单独创建缓存对象。

使用缓存

    public User getOne(Wrapper<User> queryWrapper, boolean throwEx) {
        //查询缓存
        Object obj = caffeineCache.getIfPresent("1");
        User user = null;
        if(Objects.isNull(obj)){
            System.out.println("查询db");
            user = getById(1);
            //加载到缓存中
            caffeineCache.put("1",user);
        }else {
            user = (User) obj;
        }
        return user;

    }

总结

Caffeine 是当前优秀的内存缓存框架,无论读还是写的效率都远高于其他缓存,从 Spring5 开始的默认缓存实现就将 Caffeine 代替原来的Google Guava,支持多种回收策略,感兴趣的小伙伴赶快去试试吧

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70024420/viewspace-2963478/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2022-11-21

  • 博文量
    1058
  • 访问量
    546469