发布重启后,正在进行的 200 多个会话全部从第一轮重新开始,用户说刚才说过了。乍看像缓存或者权限的锅,追下去往往不是。

redis-cli HGETALL session:abc123
redis-cli TTL session:abc123

追下去是这么回事:会话历史存在进程内存的字典里,重启即清零。多实例部署时请求还会打到没有这份历史的另一台。

「多轮会话状态丢失」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。

能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。报错里带路径的,先去看那个路径在不在、权限对不对。

同一份配置存在多处的,先确认改的是被加载的那一份。新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。

具体做法是,会话历史落到 Redis 按 session_id 存;设置合理过期时间 比如 2 小时;多实例共用同一份存储;滚动重启后再验证续聊。

验收就看一点,重启后接着上一轮提问 模型能引用之前的内容 会话不重置。

作者 9823189