视频封面 · 热门壁纸推荐 / Bilibili
543 字
3 分钟
Redis00-基础
基于Redis以及SpringBoot,实现了较为完整的业务流程
使用Redis解决了集群模式下的Session共享问题。
使用拦截器实现了用户的登陆校验功能和登录时间刷新功能。
使用Redis进行缓存,降低了数据库查询压力,解决了缓存穿透,雪崩,击穿的问题。
使用Redis与简单的Lua脚本实现了Redis操作的原子化,实现高可用,解决了用户秒杀资格的检测,同时使用了乐观锁解决了超卖问题。
==使用Redis解决了集群模式下的Session共享问题。==
Redis 在本组业务中首先承担共享存储的角色:验证码和登录信息不再只保存在某个应用实例的内存里,各实例访问同一份 Redis 数据后,才能在请求切换实例时继续识别用户。验证码与登录态应分别设计键和有效期,不能混为一条永久记录。
登录校验和登录有效期刷新是两项不同职责。请求携带有效凭证时可以恢复用户身份并续期,而是否允许访问某个业务接口,还要根据该路径是否要求登录来判断;公开页面也可能需要刷新已经存在的有效登录态。
缓存把可复用的查询结果放在数据库之前,但未命中仍可能回到数据库。处理风险时应区分三种原因:请求的数据本来不存在、单个热点键失效,以及大量键同时失效或缓存服务不可用,它们分别对应穿透、击穿与雪崩,保护策略不能互相替代。
秒杀流程需要把资格判断与并发约束分别落实:Redis 内相互依赖的判断和修改可以放入同一段 Lua 脚本,数据库库存则应在更新时检查条件。脚本的原子执行范围限于 Redis,不会自动把数据库更新、订单写入和服务高可用一并变成原子保证。