因为在电商项目中,我们时常会遇到分布式部署这种例子,当时采用了Nginx负载均衡的策略,导致每一个服务器都需要开辟一个空间来进行用户信息的维护,消耗大量的资源,索引,我当时使用的Redis作为维护用户信息的空间,将用户登录的信息存入Redis中,并且在存入时设置key的过期时间,所有的服务器共用一个Redis,每次进行操作时只需要去Redis中判断这个用户是否存在,存在的话就说明这个用户现在是登录状态,不存在就说明这个用户没有登录或者登录失效,让用户进行重新登录
- 为什么会存在单点登录的问题
- session默认是存储在当前服务器内存中,如何是集群,那么只有登录那台机器的内存中才有这个session
- 例如我在A机器登录,B机器没有这个session存在,就需要重新登录
- 如何解决这个单点登录问题
- 不管在哪一个web服务器登录,都把token值存放到我们集中管的的redis服务器中
- 但是在客户端携带token验证时。会先从redis中获取,如此就实现单点登录
- 场景举例
- 1.比如你写一个tornado项目,分别部署于A、B两台机器上
- 2.如果直接使用session,那么如果在A机器登录,token只会存在A机器的内存中
- 3.因为请求会封不到A,B连个机器,如果这个请求到了B机器,B内存中没有就会让重新登录
- 4.所以登录A机器时我们应把Token值写入Redis中,A/B机器登录,都从Redis中获取Token值进行校验
这是关于Redis分布式单点登录的一些理解,感谢赏光!