Skip to content

本地缓存

Guava

  • 支持最大容量限制
  • 支持两种过期删除策略
  • 支持简单的统计功能
  • 插入时间
  • 访问时间
  • 基于LRU算法实现
java
LoadingCache<Integer, String> cache = CacheBuilder.newBuilder()
        //设置并发级别为8,并发级别是指可以同时写缓存的线程数
        .concurrencyLevel(8)
        //设置缓存的初始容量为10
        .initialCapacity(10)
        // 设置缓存最大容量为100,超过100之后就会按照LRU最近最少使用算法来移除缓存
        .maximumSize(100)
        //设置写缓存后8秒钟过期
        .expireAfterWrite(8, TimeUnit.SECONDS)
        //设置要统计的缓存命中率
        .recordStats()
        //设置缓存移除通知
        .removalListener(new
                                 RemovalListener<Object, Object>() {
                                     public void onRemoval(RemovalNotification<Object, Object>
                                                                   notification) {
                                         System.out.println("----"+notification.getKey() + ":" + notification.getCause());
                                     }
                                 })
        //build方法可以指定CacheLoader,在缓存不存在时通过CacheLoader的实现自动加载缓存
        .build(
                new CacheLoader<Integer, String>() {
                    @Override
                    public String load(Integer s) throws Exception {
                        System.out.println("load data:"+ s);
                        String str = s+":cache-value";
                        return str;
                    }
                }
        );
xml
       <dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>18.0</version>
</dependency>

Caffeine

java8新的缓存工具,是Guava Cache的增强版。

功能上和Guava相似,只是缓存算法更优秀 - W-TinyLFU

java
Cache<Integer, String> cache = Caffeine.newBuilder()
        //设置缓存的初始容量为10
        .initialCapacity(10)
        // 设置缓存最大容量为100,超过100之后就会按照LRU最近最少使用算法来移除缓存
        .maximumSize(100)
        //设置写缓存后8秒钟过期
        .expireAfterWrite(8, TimeUnit.SECONDS)
        //设置要统计的缓存命中率
        .recordStats()
        //设置缓存移除通知
        .removalListener((Integer key, String value, RemovalCause cause) -> {
            System.out.println("缓存删除了!!!!");
        })
        //build方法可以指定CacheLoader,在缓存不存在时通过CacheLoader的实现自动加载缓存
        .build(k -> setValue(1).apply(1));
xml
        <dependency>
    <groupId>com.github.ben-manes.caffeine</groupId>
    <artifactId>caffeine</artifactId>
    <version>2.8.5</version>
</dependency>

Encache

纯java的进程内缓存框架。

  • 支持多种缓存淘汰算法
  • 支持堆内存储、堆外存储、磁盘存储等三种。
  • 支持多种集群方案,解决数据共享问题。

Guava和Caffeine只支持堆内存储,而Encache支持堆外存储和磁盘存储。

而且 Enchache 支持配置文件设置缓存的大小,可以动态调整

Ehcache 缓存框架详解-CSDN博客