暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

ExpiringMap:一个轻量级的Java缓存方式

遇见0和1 2021-09-25
3400
一、前言
在前后端分离的背景下,会存在跨域的问题,导致前端每一次请求的session id都不一样(可以打印request.getSession().getId()来查看每次请求的session id),这使得传统的 session 存储机制不在适用于某些场景,例如:在存储后端生成的校验码、短信验证码等,之后的校验请求进来之后会因为session域不同,拿不到session中存储的信息。

Tip:对于存储当前登录的用户身份信息,要用session保存的话,可在拦截器中判断当前请求session中用户信息是否为空,为空则再存储一遍,再去处理本次请求的后续逻辑代码即可!

二、ExpiringMap:一个轻量级的Java缓存方式

对于以上提出跨域时存在的问题,可用一些缓存中间件(如常用的Redis)来解决,但对于小体量的项目,存储的数据量也不是很大(如校验码)的情况下,使用Redis会增加系统的复杂性和维护难度。ExpiringMap就是一个轻量的Java缓存方式,它的功能和Redis类似。

ExpiringMap特点:可设置存储元素的过期时间,可设置最大的数据元素存储量,可添加监听事件和设置懒加载等。

三、ExpiringMap 使用示例

1、导入ExpiringMap依赖,可到Maven仓库选择需要的依赖版本:

https://mvnrepository.com/artifact/net.jodah/expiringmap


2、初始化一个ExpiringMap(配置过期时间、过期协议等)

Tip:过期协议分有两种:
ExpirationPolicy.CREATED 
和 
ExpirationPolicy.ACCESSED。
前者每次更新元素时,过期时间会同时清零;后者是在每次访问元素时,过期时间同时清零。

3、使用ExpiringMap存和取
Tip:ExpiringMap的存和取,与普通 Map<K,V> 一样put,get


四、拓展
个人开发小习惯,使用 Hutool 生成6个随机数(数字,不包含字母和符号)作为验证码
import cn.hutool.core.util.RandomUtil;


String smsCode = RandomUtil.randomNumbers(6);
文章转载自遇见0和1,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论