ExpiringMap:轻量级的Java缓存方式

一、ExpiringMap

具有高性能、低开销、零依赖、线程安全、使用 ConcurrentMap 的实现过期 entries 等优点。
其主要特点包括:过期策略、可变有效期、最大尺寸、侦听器过期、延迟输入加载、过期自省等。

二、基本功能

1、可设置 Map 中的 Entry 在一段时间后自动过期。

2、可设置 Map 最大容纳值,当到达 Maximum size 后,再次插入值会导致 Map 中的第一个值过期。

3、可添加监听事件,在监听到 Entry 过期时调度监听函数。

4、可以设置懒加载,在调用 get() 方法时创建对象。

三、使用方式

1、pom.xml 中添加依赖

 <dependency>
     <groupId>net.jodah</groupId>
     <artifactId>expiringmap</artifactId>
     <version>0.5.8</version>
 </dependency>

2、创建静态方法

public class CacheUtils {
    /**
     * 缓存用户信息
     */
    public static final ExpiringMap<String, String> USER_INFO_MAP = ExpiringMap.builder()
              .maxSize(1000)
              .expiration(12, TimeUnit.HOURS)
              .variableExpiration()
              .expirationPolicy(ExpirationPolicy.ACCESSED)
              .build();

    /**
     * 缓存车牌颜色信息
     */
    public static final ExpiringMap<Integer, String> PLATE_COLOR_MAP = ExpiringMap.builder()
            .maxSize(1000)
            .expiration(24, TimeUnit.HOURS)
            .variableExpiration()
            .expirationListener((key,value) -> {
                System.out.println("key:" + key + "已过期……");
            })
            .expirationPolicy(ExpirationPolicy.ACCESSED)
            .build();
}

① maxSize:Map存储的最大值,类似队列,容量固定,当操作map容量超出限制时,最开始的元素就会依次过期,只保留最新的;

② expiration:过期时间;

expirationListener:过期监听;

expirationPolicy:过期策略,包括 ExpirationPolicy.ACCESSED 和 ExpirationPolicy.CREATED 两种;

1)ExpirationPolicy.ACCESSED :每进行一次访问,过期时间就会自动清零,重新计算;

2)ExpirationPolicy.CREATED:在过期时间内重新 put 值的话,过期时间会清理,重新计算;

3、测试

public class TestMain {

    public static void main(String[] args) {
        //存入元素
        CacheUtils.USER_INFO_MAP.put("00001","zhangsan");

        //取出元素
        String userName = CacheUtils.USER_INFO_MAP.get("00001");
        System.out.println("userName:" + userName);

        //查询剩余过期时间
        long expectedExpiration = CacheUtils.USER_INFO_MAP.getExpectedExpiration("00001");
        System.out.println("剩余过期时间:" + expectedExpiration);

        //查看设置的过期时间
        long expiration = CacheUtils.USER_INFO_MAP.getExpiration("00001");
        System.out.println("设置的过期时间:" + expiration);

    }
}

结果打印:
userName:zhangsan
剩余过期时间:43199999
设置的过期时间:43200000

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值