0


ExpiringMap的使用

1 使用场景

    今天在公司与第三方进行接口对接时,需要从对方获取token。但对方技术人员说不要每次调用接口都从那边重新获取,那样对方存储的太多了。返回一个token和过期时间。将token存储起来,在过期时间内直接从本地去拿,token过期了再次重新获取。

    本来想着用Redis,但再一想没有这个必要再次引入一个中间件,使得系统结构复杂,就直接用了ExpiringMap来进行存储。

2 使用方法介绍

ExpiringMap<String, String> map = ExpiringMap.builder()
        .maxSize(2)
        .expiration(10, TimeUnit.SECONDS)
        .variableExpiration()
        .expirationListener((key,value)->{
            log.info("上次token已过期,过期token为:{}",value);
        })
        .expirationPolicy(ExpirationPolicy.CREATED).build();

.maxSize() 能够定义map存储的大小

.expiration() 能够定义map的过期时间

.expirationListener() 过期监听时间 当map过期时会被自动监听到

expirationPolicy 过期协议

    ExpirationPolicy.CREATED 每次更新元素时,过期时间全部清零

    ExpirationPolicy.ACCESSED 每次访问元素时,过期时间全部清零

3 使用

当过期时间到了 map中的值会被清空并且被监听出来

当过期协议为ExpirationPolicy.CREATED 并且在过期时间内再次put元素

    看结果可知 当在过期时间内重新put值的话,过期时间会清理重新计算

当过期协议为ExpirationPolicy.ACCESSED时 每进行一次访问,过期时间就会自动清零

看结果可知 如果在过期时间内 对map进行访问 过期时间会自动清零

.maxSize() 当put的元素超过自己所规定的个数时,那么之前加入的就会按照超过的数量过期

我们看结果可以发现 值依次可以输出出来,但其实key为“1”的键值对,因为key为“3”的加入已经过期,因为map中我们设置了大小为2

以上是我们进行的一个验证,可见key为“1”的键值对的确已经过期了

标签: java-ee java tomcat

本文转载自: https://blog.csdn.net/qq_50652600/article/details/120468873
版权归原作者 想养一只萨摩耶~ 所有, 如有侵权,请联系我们删除。

“ExpiringMap的使用”的评论:

还没有评论