版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mengtianqq/article/details/81455778
java后台实现移动登录缓存机制,(过期清除缓存)
目录
一、目的是什么?
为了实现定期清除移动端登录后长时间没有操作的用户,也是把登录长时间没有操作的这些用户定期下线处理了。把登录后的权限收回来。
二、原理:
1、自定义的缓存类A(MoblieUserCache)
2、在这个缓存类A中有一个保存用户登录信息的静态列表对象B(HashMap<String, MHLoginInfo> userList)。
3、自定义的缓存类A中有一个方法C(ClearData),这个方法可以删除长时间没有登录的用户信息(信息保存在静态列表对象B)。
4、可以一个定时器中定时执行静态方法缓存类A中的方法C。
三、实现:
1、自定义的缓存类A,MoblieUserCache:
public class MoblieUserCache {
public static HashMap<String, MHLoginInfo> userList = new HashMap<String, MHLoginInfo>();
private static int EXTIME = 120; // 过期时间,分钟
public static void AddUser(String sessionId, MHLoginInfo user) {
user.setCacheTime(new Date());
userList.put(sessionId, user);
}
public static MHLoginInfo GetUser(String sessionId) {
if (userList.containsKey(sessionId)) {
MHLoginInfo user = userList.get(sessionId);
Calendar nowTime = Calendar.getInstance();
nowTime.add(Calendar.MINUTE, -EXTIME);
Date ntime=nowTime.getTime();
if (user != null && user.getCacheTime() != null
&& ntime.before(user.getCacheTime())) {
user.setCacheTime(new Date());
userList.put(sessionId, user);
return user;
}else{
if(userList.containsKey(sessionId)){
userList.remove(sessionId);
}
}
return null;
}
return null;
}
public static void ClearData() {
Calendar nowTime = Calendar.getInstance();
nowTime.add(Calendar.MINUTE, -EXTIME);
Date ntime=nowTime.getTime();
for (String key : userList.keySet()) {
MHLoginInfo user = userList.get(key);
if (user.getCacheTime()== null|| ntime.after(user.getCacheTime())) {
userList.remove(key);
}
}
}
}
2、HashMap<String, MHLoginInfo> userList:
public static HashMap<String, MHLoginInfo> userList = new HashMap<String, MHLoginInfo>();
3、自定义的缓存类A中有一个方法C(ClearData)
public static void ClearData() {
Calendar nowTime = Calendar.getInstance();
nowTime.add(Calendar.MINUTE, -EXTIME);
Date ntime=nowTime.getTime();
for (String key : userList.keySet()) {
MHLoginInfo user = userList.get(key);
if (user.getCacheTime()== null|| ntime.after(user.getCacheTime())) {
userList.remove(key);
}
}
}
4、可以一个定时器中定时执行静态方法缓存类A中的方法C:
public class UpdateUserCacheTask extends QuartzJobBean {
final static Logger logger = Logger.getLogger(UpdateUserCacheTask.class);
private static boolean running = true;
private void run() {
if (!running) {
return;
}
try {
running = false;
logger.info("执行用户缓存清理");
MoblieUserCache.ClearData();
running = true;
} catch (Exception e) {
e.printStackTrace();
logger.error("Error when UpdateUumsSysSendTask.run ", e);
}
}
@Override
protected void executeInternal(JobExecutionContext arg0)
throws JobExecutionException {
run();
}
}