shiro + redis session过期时间不符合预期,提前过期

本文探讨了在使用Shiro和Redis时遇到的Session提前过期的问题。Redis设置的过期时间为8小时,但实际在5小时内Session就失效。经过排查,问题可能出在Redis内存淘汰策略、maxmemory未设置以及Shiro中cookie过期时间配置不当。通过调整Redis的maxmemory、内存淘汰策略为allkeys-lru以及修正Shiro的cookie过期时间,解决了Session异常过期的问题。总结了可能影响Session过期时间的三个因素:Redis key过期时间、内存淘汰策略和cookie过期时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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被清除

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值