標籤:
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做逾時判斷 感覺寫的很有意思