码迷,mamicode.com
首页 > 其他好文 > 详细

用redis做超时判断 感觉写的很有意思

时间:2015-11-23 16:53:24      阅读:255      评论:0      收藏:0      [点我收藏+]

标签:

public Long getSessionIdByUserId(Long systemId, Long customerUserId) {
if (customerUserId == null) {
LoggerHelper.info(this.getClass(), "custom user id is null.");
return DEFAULT_SESSION_ID;
}

Long sessionId = getSessionId(String.valueOf(customerUserId)); ------判断这用户是否有session的记录
if (sessionId == null) { --------创建一条新的记录放入数据库 同时反馈出sessionid
QuerySession session = new QuerySession(systemId, customerUserId);
querySessionDao.save(session);

sessionId = session.getId();
}

putSessionId(String.valueOf(customerUserId), sessionId, SESSION_EXPIRE_MINUTES); -----------比较意思的地方,把sessionid和超时时间放入redis

return sessionId;
}

放入redis


private void putSessionId(String userName, Long sessionId, int expireAfterMinutes) {
if (userName == null || sessionId == null) {
return;
}
ValueData valueData = new ValueData(sessionId, System.currentTimeMillis() + expireAfterMinutes * 60 * 1000); --------创建一条记录 sessionid 和 超时的时间点
redisTemplate.boundHashOps(QUERY_SESSION_KEY).put(userName, valueData);
}

之后取redis判断函数

private Long getSessionId(String userName) {
ValueData value = (ValueData) redisTemplate.boundHashOps(QUERY_SESSION_KEY).get(userName);
if (value == null) {
return null;
}
// check if expire
if (System.currentTimeMillis() > expireTimeMillion) { --------------验证是否过了这个时间点~~~
        redisTemplate.boundHashOps(QUERY_SESSION_KEY).delete(userName);
return null;
} else {
return value.sessionId;
}
}

模拟的超时请求~~~


用redis做超时判断 感觉写的很有意思

标签:

原文地址:http://www.cnblogs.com/hexie/p/4988738.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!