这个问题只在促销高峰出现:客户浏览几分钟后突然变游客,购物车有时还在。Redis没有宕机,PING也正常,但 evicted_keys一直增长。Session和普通cache放在同一个实例、同一个内存池里,缓存挤满后连Session一起被淘汰了。

redis-cli INFO memory
redis-cli INFO stats | grep -E 'evicted_keys|keyspace_hits|keyspace_misses'
redis-cli CONFIG GET maxmemory-policy

对Session来说,allkeys-lru意味着任何会话都可能被赶走。最稳妥的是把Session与cache/page_cache分到独立Redis实例或至少独立的资源配额;Session实例通常不应该依赖淘汰来维持运行。

别只把maxmemory调大

先看使用量为什么涨:过长的session lifetime、机器人制造大量新会话、购物车Session膨胀、清理任务失效,都会把问题拖回来。抽样看Key TTL和大小,别把真实Session内容复制到日志。

redis-cli --bigkeys
redis-cli INFO keyspace
# 只在受控环境抽样TTL,不要全量扫描高峰生产实例

切换实例后观察24小时:evicted_keys应停止增长,登录Session跨节点稳定,Redis延迟和内存曲线平稳。购物车如果存在quote表但前端变空,还要把customer-data和Cookie一并测,不能只看后台登录状态。