You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用Redisson实现Tomcat Session Redis存储时的连接异常及Redis服务停止问题求助

解决Redisson存储Tomcat Session时Redis连接异常及崩溃问题

从你提供的错误信息(WriteRedisConnectionExceptionConnection reset by peerStacklessClosedChannelException)和配置来看,问题核心是Redis连接异常,甚至引发了Redis服务器崩溃。下面是具体的排查和解决方向:

1. 检查版本兼容性问题

你使用的spring-data-redis-1.6.2.RELEASEjedis-2.5.1都是比较老旧的版本,若Redisson版本过高,很容易和这些组件、Redis服务器版本产生兼容冲突:

  • 确认Redisson版本与Redis服务器匹配:比如Redis 6.x+需要Redisson 3.12及以上版本,Redis 7.x需要Redisson 3.16+
  • 尝试降低Redisson版本到与Spring Data Redis兼容的范围,比如Spring Data Redis 1.6.x搭配Redisson 3.8.x左右的稳定版本

2. 排查Redis崩溃的根本原因

Redis突然停止运行,一定要查看它的日志文件(通常路径是/var/log/redis/redis-server.log或Redis安装目录下的redis.log),日志会明确记录崩溃原因:

  • 内存溢出(OOM):如果日志里有OOM command not allowed when used memory > maxmemory,需要调整Redis的maxmemorymaxmemory-policy配置,比如增大内存限制,或者把maxmemory-policy设置为allkeys-lru
  • 命令执行异常:如果是Redisson发送的某个命令导致Redis崩溃,大概率是Redis版本bug,建议升级Redis到最新稳定版

3. 优化Redisson连接配置

你的redisson.conf里部分连接参数可能不合理,容易导致连接超时或断开:

  • 调大超时时间:把timeout从3000改为5000或10000,connectTimeoutidleConnectionTimeout也同步调整到10000以上
  • 调整连接池大小:如果Tomcat并发量较高,connectionPoolSize=64可能不够,可以增大到128;同时connectionMinimumIdleSize不要设置过大,避免占用过多Redis连接资源
  • 确认Redis绑定地址:检查Redis配置文件的bind项,如果设置了特定IP,要和redisson.conf里的address匹配,或者直接设为bind 0.0.0.0允许所有IP连接(生产环境注意配合密码认证)

4. 检查Session数据的序列化兼容性

你使用的SerializationCodec是JDK默认序列化,如果Session中存储的对象没有实现Serializable接口,会导致序列化失败,进而引发Redis处理异常:

  • 确认所有放入Session的对象(包括自定义对象)都实现了java.io.Serializable接口
  • 也可以尝试更换序列化方式,比如用JsonJacksonCodec避免JDK序列化的兼容性问题,修改redisson.conf的codec配置:
codec: !<org.redisson.codec.JsonJacksonCodec> {}

5. 解决Spring Data Redis与Redisson的连接冲突

你同时用Spring Data Redis(Jedis)和Redisson操作同一个Redis数据库(database 0),可能导致连接池资源抢占或命令冲突:

  • 给两者分配不同的Redis数据库:比如把Redisson的database改为1,Spring Data Redis保持0,避免相互干扰
  • 检查两者的连接池配置,确保总连接数不超过Redis的maxclients设置(默认是10000)

6. 验证Redis基础可用性

先手动测试Redis连接是否正常,排除基础问题:

  • redis-cli连接Redis:redis-cli -h 127.0.0.1 -p 6379,执行PING命令看是否返回PONG
  • 模拟Redisson的操作,手动执行HMGET命令:HMGET redisson:tomcat_session:34AE84972BC40CFB6C9C1B58CCDF37FE attr1 attr2(替换为实际的Session属性键),查看是否能正常返回结果

内容的提问来源于stack exchange,提问作者Bala

火山引擎 最新活动