admin 管理员组文章数量: 1184232
也是做完了黑马点评这个项目,但是由于时间跨度。有些东西可能不是很清楚了。
为了面向面试,写这一篇总结来复习加深对项目的理解。
总体上,这个项目是基于基于springboot框架构建,数据库用的mysql,并用mybatis简化数据操作。redis是这个项目的重点技术栈,通过redis完成了页面查询的缓存功能,并解决了缓存穿透、雪崩、击穿等问题。使用redis完成订单全局唯一id的生成,并使用redis配合lua脚本完成了分布式锁,解决了集群模式下的一人一单问题。最后使用redis的sortedset完成了点赞排行、共同关注功能。还用redis的bitmap位图完成了用户签到的功能,减少了存储空间,记录一个用户一个月的签到情况只占4个字节。
项目实现的第一个功能是:短信登录
短信登录session版本:
短信的登录先是使用session技术,后来换成使用redis。
具体流程:
发送验证码:
前端给后端发手机号,1、后端先验证号码格式是否正确。2、若是正确,发送六位验证码并存入session。
验证码登录:
前端使用发送来的验证码登录,就是给后端发送手机号和验证码。1、后端先验证手机号格式是否正确。2、后端从session里面取出验证码和前端发送的验证码对比,验证验证码是否正确。3、若验证码正确,用手机号从数据库里查询是否存在此用户。4、若是存在的话,把用户信息存入session作为登录权限。5、若是没有,在数据库里面加入此用户,然后将此用户信息存入session(快速登录)。
校验登录状态:
使用拦截器实现校验。不用拦截器而只写业务判断session里的信息是否存在,这样每个service层都要写一个业务来拦截不方便。所以使用拦截器。
拦截器使用流程:1、自定义一个拦截器类,里面写相应逻辑。2、写一个配置类。申请拦截器,并指定拦截范围。
短信登录Redis版本:
直接用session版本来实现短信登录有问题,还是session的那些老问题,session是存在服务器的,对于跨域问题和集群问题不友好。
那就使用Redis来代替session,redis数据共享,内存存储,还是key value结构。
发送验证码:
前端发送手机号码到后端。1、后端检验手机号格式是否正确。2、正确,生成验证码,写进Redis,使用string结构,key用前缀+phone,value就是验证码。(session只要管怎么放不用管怎么拿,tomcat自动处理的。但是redis是公共的,要想怎么拿,也就是怎么设置key)
验证码登录:
用户收到验证码,前端发送手机号+验证码。1、后端先校验手机号格式是否正确。2、正确,从Redis里面取验证码对比。3、验证码正确,通过手机号查用户。4、用户存在,存入Redis。5、用户不存在,创建用户放进数据库,并存入Redis。6、给存入redis的数据加入有效期ttl(登录时限)7、返回token,响应给前端,前端会将token存储起来,后面每次请求都携带。///////这里存入redis使用hash结构,为什么?其实也可以使用string存json字符串,但是hash更好一些。key是前缀加token,value位user对象转成的map数据,field:value这样。然后token是随机生成的UUID。
校验登陆状态:
依旧使用拦截器。拦截器里面逻辑改一下。1、从请求头中取出token,组成key,从redis里面拿出user信息。2、若有user信息,则通过,没有则拦截。3、将user信
版权声明:本文标题:黑马点评项目总结 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1767908597a3516847.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论