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”的键值对的确已经过期了
版权归原作者 想养一只萨摩耶~ 所有, 如有侵权,请联系我们删除。