1、频繁访问redis更新session
网上解决方法:
重写retireveSession,并且储存在request,从里面获取数据
该方法减少了接近6倍访问频次
问题:
2、sessionDao方法:
在session.setTimeout(redisManager.getExpire()*1000);
保存过redis的session的时间会话时间都会被更新为0,也就是说外面的session都是过期的。
导致session被扫描器扫描到便失效,并且删除redis中的
解决该问题:
重写AbstractSessionDao
不设置时间
----------------------网上解决方法----------------------------------
@Override
protected Session retrieveSession(SessionKey sessionKey) throws UnknownSessionException {
/**
* 获取顺序:
* 1、先从webkey中
* 2、从request中
* 3、从cookie
* 4、创建cookie
*/
Serializable sessionId = getSessionId(sessionKey);
ServletRequest request = null;
if (sessionKey instanceof WebSessionKey) {
request = ((WebSessionKey) sessionKey).getServletRequest();
}
if (request != null && null != sessionId) {
Object sessionObj = request.getAttribute(sessionId.toString());
if (sessionObj != null) {
logger.debug("read session from request");
return (Session) sessionObj;
}
}
// Session s = retrieveSessionFromDataSource(sessionId);
SimpleSession session = (SimpleSession) super.retrieveSession(sessionKey);
// SimpleSession simpleSession = session;
if (request != null && null != sessionId) {
// session.setExpired(true);
request.setAttribute(sessionId.toString(), session);
}
return session;
}