shiro + redis session过期时间不符合预期,提前过期
redis的过期时间设置的是8小时,如下
/**
* 配置shiro redisManager
* 使用的是shiro-redis开源插件
*
* @return
*/
public RedisManager redisManager() {
RedisManager redisManager = new RedisManager();
redisManager.setHost(hostIp);
redisManager.setPort(6379);
redisManager.setExpire(28800);// 配置缓存过期时间
redisManager.setTimeout(0);
redisManager.setPassword(password);
return redisManager;
}
但登陆的用户莫名其妙在5小时甚至更短时间就session失效了
考虑到服务器内存有点吃力,就查了一下redis的内存淘汰机制,请参考:查看Redis的默认设置的过期策略和内存淘汰机制,当时发现默认的策略为:```noeviction``,
在此策略下如果缓存数据超过了maxmemory限定值,
并且客户端正在执行的命令(大部分的写
入指令,但DEL和几个指令例外)会导致内存分配,则向客户端返回错误响应
再登录redis查看一下maxmemory,请参考:查看redis占用内存大小以及其他运行信息,
发现竟然没有设置
那可能的原因就是内存不足了,key被清除