首页 > 编程知识 正文

集群中session如何实现共享,redis底层数据结构面试

时间:2023-05-04 11:57:38 阅读:32062 作者:939

http://www.Sina.com/http://www.Sina.com /

首先,为什么会出现这样的session共享解决方案? 随着互联网公司的项目在微服务和分布式环境中构建,一个项目可能分别位于几个或多个服务器群集之下,这种情况下会出现问题。

当用户进行session会话时(例如,当用户登录到项目时),典型的大型企业项目由Nginx进行反向代理

这里简要列举了Nginx中几种常用的反向代理策略。

轮询策略、

加权比例策略、

ip_hash策略、

可定制的战略、

在Nginx反向代理中,通常将用户的请求分发到不同的服务器,但如果用户请求的请求存储在请求的服务器a上,则该用户的sessionID存储在该服务器上JVM的ConcurrentHashmap中

但是,此时在需要向服务器b调用用户请求的服务模块的情况下,在用户开始请求时,由于在那时的服务器b中没有存储该用户的sessionID,所以再次使用户进行登录操作。 另外,用户本来想完成一个订单操作,但有时会多次登录。

所以,session共享方案在分布式环境和微服务系统下显得尤为重要。

解决方案1 :基于nginx的ip_hash负载平衡实际上是对请求的ip地址的可用服务器数量进行建模,然后通过nginx反向代理将请求分发到相应的服务器。 (在此,将可用服务配置在一个数组中,如果取模型得到的结果是数,则服务数组内的下标对数个服务进行请求)

点击关注公众号,实用技术文章

必须在Nginx.conf文件中进行相应的修改,并根据可用服务进行修改

upstreambackend{ip_hash; 服务器192.168.128.1:8080; 服务器192.168.128.2:8080; 服务器192.168.128.8080 down; 服务器192.168.128.433608080 down; }服务器{ listen 8081; server_nametest.csdn.net; 根/家庭/系统/test.csdn.net/test; 位置^~~/upload/upload { proxy _ pass http://back end; }实现这一目标的优缺点:

解决方案基于Tomcat的session复制实际上是在用户请求时将生成的sessionID复制到系统的所有服务器,从而在用户请求时从服务器a调用服务器b上的模块解决了问题。

及时了解

具体实现:

解决方案3 :使用3:Redis制作缓存会话的统一缓存的方案吧。 其实就是将每次用户请求时生成的sessionID放在redis的服务器上。 并且,通过进行基于Redis的特性设定失效时间的机制,可以保证用户在我们设定的Redis的session失效时间内不需要再次登录。 推荐: 250期面试问题

具体代码中如何实现session复制呢?

使用session复制的优缺点:

解决方案四:结合cookie其实也可以把session放在cookie里。 每次用户请求时,都会将自己的cookie放在请求中,这样可以确保每次用户请求时,用户都不会在分布式环境中进行辅助登录。

谢谢你读给我听。 我希望对你有帮助。 )

参考:网络易云教室

资料来源: blog.csdn.net/qq_36520235/

article/details/87830929

【练手项目】基于SpringBoot的ERP系统,带入站财务生产功能与SpringBoot共享基于Vue的企业级后台开源项目,代码规范! 能赚钱的开源SpringBoot商城系统,功能非常齐全,非常漂亮! PS :公众号平台修改了推送规则,如果不想错过内容,看完请点击“看”,打上“星号”。 这样,每次推送新文章时,它都会首先显示在订阅列表中。 点“我在看”来支持吧。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。