redis解决了分布式系统的session一致性问题

一、Session有什么作用?

Session 是客户端与服务器通讯会话跟踪技术,服务器与客户端保持整个通讯的会话基本信息。
客户端在第一次访问服务端的时候,服务端会响应一个sessionId并且将它存入到本地cookie中,
在之后的访问会将cookie中的sessionId放入到请求头中去访问服务器,
如果通过这个sessionid没有找到对应的数据,那么服务器会创建一个新的sessionid并且响应给客户端。

二、分布式session有什么问题?

​​

三、案例实战:Springboot实现用户登录session管理功能

步骤1:加入springboot的常用依赖包

    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.8</version></dependency>

步骤2:编码实现用户登录逻辑

核心代码
session.setAttribute(session.getId(), user);
session.removeAttribute(session.getId());

@Slf4j
@RestController
@RequestMapping(value = "/user")
public class UserController {Map<String, User> userMap = new HashMap<>();public UserController() {//初始化2个用户,用于模拟登录User u1=new User(1,"agan1","agan1");userMap.put("agan1",u1);User u2=new User(2,"agan2","agan2");userMap.put("agan2",u2);}@GetMapping(value = "/login")public String login(String username, String password, HttpSession session) {//模拟数据库的查找User user = this.userMap.get(username);if (user != null) {if (!password.equals(user.getPassword())) {return "用户名或密码错误!!!";} else {session.setAttribute(session.getId(), user);log.info("登录成功{}",user);}} else {return "用户名或密码错误!!!";}return "登录成功!!!";}/*** 通过用户名查找用户*/@GetMapping(value = "/find/{username}")public User find(@PathVariable String username) {User user=this.userMap.get(username);log.info("通过用户名={},查找出用户{}",username,user);return user;}/***拿当前用户的session*/@GetMapping(value = "/session")public String session(HttpSession session) {log.info("当前用户的session={}",session.getId());return session.getId();}/*** 退出登录*/@GetMapping(value = "/logout")public String logout(HttpSession session) {log.info("退出登录session={}",session.getId());session.removeAttribute(session.getId());return "成功退出!!";}}

步骤3:编写session拦截器

session拦截器的作用:
验证当前用户发来的请求是否有携带sessionid,如果没有携带,提示用户重新登录。

步骤4:体验测试

http://127.0.0.1:9090/user/login?username=agan1&password=agan1
http://127.0.0.1:9090/user/find/agan1

redis解决了分布式系统的session一致性问题相关推荐

  1. Shiro结合Redis解决集群中session同步问题

    Shiro结合Redis解决集群中session同步问题 参考文章: (1)Shiro结合Redis解决集群中session同步问题 (2)https://www.cnblogs.com/Luke-M ...

  2. 8.redis解决分布式session问题 、redis在项目中难点

    a.什么是session session是一种会话技术,我们知道http是无状态协议的,就是这次连接传输数据后,下次连接服务器是不知道这次的请求是谁的,因此我们要做一个标记,让服务器知道每次请求是哪个 ...

  3. razor 怎样使用session变量_Nginx负载均衡解决session一致性问题

    [145] 前言: http协议是无状态的,即你连续访问某个网页100次和访问1次对服务器来说是没有区别对待的,因为它记不住你. 那么,在一些场合,确实需要服务器记住当前用户怎么办?比如用户登录邮箱后 ...

  4. redis实现轮询算法_白话分布式系统中的一致性哈希算法

    本文首发于:白话分布式系统中的一致性哈希算法 微信公众号:后端技术指南针 持续输出干货 欢迎关注! 通过本文将了解到以下内容:分布式系统的概念和作用 分布式系统常用负责均衡策略 普通哈希取模策略优缺点 ...

  5. Redis 解决 WebSocket 分布式场景下 Session共享问题

    点击上方"服务端思维",选择"设为星标" 回复"669"获取独家整理的精选资料集 回复"加群"加入全国服务端高端社群「后 ...

  6. 170222、使用Spring Session和Redis解决分布式Session跨域共享问题

    使用Spring Session和Redis解决分布式Session跨域共享问题 原创 2017-02-27 徐刘根 Java后端技术 前言 对于分布式使用Nginx+Tomcat实现负载均衡,最常用 ...

  7. Redis解决websocket在分布式场景下session共享问题

    欢迎关注方志朋的博客,回复"666"获面试宝典 来源:blog.csdn.net/weixin_45089791/article/ details/118028312 在显示项目中 ...

  8. 分布式系统session一致性的问题

    session的概念 什么是session? 服务器为每个用户创建一个会话,存储用户的相关信息,以便多次请求能够定位到同一个上下文.这样,当用户在应用程序的 Web 页之间跳转时,存储在 Sessio ...

  9. 如何解决分布式系统数据事务一致性问题(HBase加Solr)

    如何解决分布式系统数据事务一致性问题(HBase加Solr) 参考文章: (1)如何解决分布式系统数据事务一致性问题(HBase加Solr) (2)https://www.cnblogs.com/wg ...

最新文章

  1. 高并发高可用系统应对策略的一些思考
  2. 学习如何写PHP MVC框架(1) -- 路由
  3. 编译cvaux错误的原因
  4. RUNOOB python练习题 14
  5. 安装 Nexus——war版本
  6. 某级数的前两项A1=1,A2=1,以后各项具有如下关系:An=An-2+2An-1。使用非递归的算法求解满足要求的n值的程序。
  7. nexttick使用场景_Vue -- nextTick
  8. firebug的调试,console
  9. [19/05/06-星期一] JDBC(Java DataBase Connectivity,java数据库连接)_基本知识
  10. 生产者消费者实现用c语言用物品1,物品2等来代替,用C语言编写程序:生产者和消费者之间实现同步与互斥问题...
  11. matlab进行分子动力学模拟,一种基于分子动力学模拟测试碳纳米管力学性能的方法与流程...
  12. 关于联想Y400/Y500刷BIOS解锁网卡、单双650M、单双750M超频
  13. epoll原理详解及epoll反应堆模型
  14. SREng 日志分析方法
  15. C语言海鲜拼盘-01
  16. Java SE 易错题
  17. 【体系-微服务架构】23-Spring Cloud Spring生态链(Alibaba)
  18. 16位流水线CPU设计(部分)
  19. 解决客户端 query did not return aunique result:2
  20. (医用耗材管理系统)Spd系统模式概述-盘谷医疗一种医疗精细化管理模式

热门文章

  1. LinuxDHCP中继,DHCP服务IP自动获取
  2. 奇异值分解与低秩矩阵近似
  3. 《统一沟通-微软-实战》-3-部署-Exchange 2010-3-证书-创建-导入-分配
  4. 设计模式(5)—— 工厂方法模式(Factory Method,创建型)
  5. 《OSPF和IS-IS详解》
  6. 星辰小组——第一阶段评分+各小组的意见反馈
  7. 邓俊辉数据结构学习-7-BST
  8. 关于redis性能问题分析和优化
  9. 41.字符串函数(三)
  10. UVA11270 Tiling Dominoes —— 插头DP