session跟cookie不一样,session是存放在服务端,在多服务器的环境下,用的session需要分配在同一个服务器才能正常识别,而,nginx的upstream用来做负载均衡很方便的,最后那个方案是最方便的,懒得看的可以直接拉到最后
这个方案对需要频繁对session进行读写的服务里面实际是不太友好的,因为不论redis是放在哪里,内网还是外网,多服务的环境下还是需要频繁的网络请求,这里面的时间差积沙成塔,性价比是很低的
这个方案在百度上有很多人在用,原理是根据IP的C段之前三位数的hash分配服务器,这样同一个ip就能持续连同一台服务器,但是实际有一个很大的问题,用户在4G环境,快速移动的状态下,基站分配的ip地址是有差别的,这样实际就是没用
upstream session_server{ hash ip_hash; server 127.0.0.1:8080; server 127.0.0.2:8080; }
跟方案二差不多,对session一致性这个需求的用处不大
跟方案一的原理差不多,不过这个方案是通过tomcat的server.xml文件进行配置,具体配置文件百度有很多,这个挺稳的
springboot可以直接通过设置这个注解在redis配置,实际就是方案一的自动构建版
其实跟方案二差不多,但是我不知道为啥没什么人推荐这个方法,他是根据cookie或jsessionid来分配服务器,其实就是刚好满足我们的 "session一致性"的需求,这是nginx17之后更新的新标签,大家可以去官方文档查阅一下.
http://nginx.org/en/docs/http/ngx_http_upstream_module.html