1.单点登录
1.1 什么是单点登录
单点登录: 一次登录多次使用 前提: 单点登录多使用在分布式系统中
1.2 Demo
参观动物园过程:
- 直接去动物园,则会被直接拦下[查看是否有门票],没有则去售票处买票
- 登录 = 买票
- 我去买票[持有门票,准备进入] 检票员check
- Token = 门票
- 我们持有票就可以参观
2.购物车
2.1 购物车定义
- 购物车与用户之间的关系
- 一个用户必须对应一个购物车(一个用户不管买多少商品,都会存在属于自己的购物车中)
- 单点登录一定在购物车之前
- 跟购物车有关的操作由哪些
- 添加购物车
- 用户未登录状态
- 添加到什么地方?未登录将数据保存到什么地方
- Redis中 --- 京东
- Cookie中 --- 自己开发可以使用
- 如果禁用了Cookie 可以存放在localstorege中
- 添加到什么地方?未登录将数据保存到什么地方
- 用户登录状态
- Redis缓存中(读写速度快)
- Hash: hset存储 (key , field , value)
- Key : user : userID cart
- Hset(Key , skuID , value)
- Hash: hset存储 (key , field , value)
- 存在数据库中(oracle , mysql) 保证数据安全性
- Redis缓存中(读写速度快)
- 用户未登录状态
- 展示购物车
- 未登录状态展示
- 直接从cookie中取得数据展示即可
- 登录状态展示
- 用户一旦登录: 必须显示数据库(Redis) + Cookie中的购物车的数据
- Cookie中有3条记录
- Redis中有5条
- 真正展示的应该是8条
- 用户一旦登录: 必须显示数据库(Redis) + Cookie中的购物车的数据
- 未登录状态展示
- 添加购物车
3.消息队列
3.1 背景
在分布式系统中是如何处理高并发的
-
由于在高并发的环境下,来不及同步处理用户发送的请求,则会导致请求发生阻塞
- 大量的Insert,update之类的请求同时到达数据库MySQL,直接导致无数的行锁表锁,甚至会导致请求堆积很多,从而触发too many connections 错误。使用消息队列的异步通信可以解决
-
异步
-
并行
-
排队
-
使用场景:
- 消息队列的弊端:
- 消息的不确定性: 采用延迟队列,轮询技术来解决问题即可