当我尝试将 redis 用作以下配置的会话服务器时,我遇到了问题:
- 多个 Windows 服务器使用https://github.com/Azure/aspnet-redis-providers托管相同的应用程序
- 具有加权路由的弹性负载均衡器将请求重定向到所有 IIS 服务器
- Redis 托管在 AWS 弹性缓存中,可从两台服务器访问
Redis 一次充当 1 个服务器的会话服务器,没有任何问题
为每个会话创建 3 个密钥
"{/_ktffpxxxxxxg2xixdnhe}_Write_Lock"
"{/_ktffpxxxxxxg2xixdnhe}_Data"
"{/_ktffpxxxxxxg2xixdnhe}_Internal"
问题:当 1+ 台服务器尝试为同一用户提供服务时,通过在同一实例中从 redis 访问会话,如果 server1 已放置,_Write_Lock
则 server2 无法读取+更新超时或写入数据,之后它清除了密钥
--> 结果,用户对任何服务器的下一个请求无法验证他/她的会话。
我是唯一一个遇到这个问题的人吗??请帮忙 ...
注意:在 ELB 中启用会话粘性后,注销不是间歇性的,但这限制了我们在不丢失该服务器的所有用户会话的情况下取出服务器进行升级。