个人写校园点评项目的笔记

目录

​编辑

1.解决短信登陆--2023.4.14

redis

数据类型

阿里云短信服务

存入redis的key和value

流程 

dto的意义

给token设置有效期

拦截器的类没有交给Spring

Constants

2.商户查询缓存(不采用SpringCache,而是尝试原理实现) 2023-4-13

流程:

opsForValue().increment(key,delta)

3 探店笔记

4.关注推送(Feed流)

如何实现Feed流的滚动分页 



1.解决短信登陆--2023.4.14

redis

tips---- "login:user"自动分类,如果有多个login:的文件,则会变成login文件夹下的user

数据类型

首先呢不同数据类型的KEY都是一个样,数据类型不同就是VALUE类型不同!

String:VALUE是String

Hash:Value是Hash

List:

Set:Value里面是个Set

可以看见一个KEY对应着一个Set value,其中value里面的值有很多个 

SoretedSet(又叫Zset):

 Key --->[{value,score}]

根据score来排序,在插入元素之后,插入填入value,score

KeyValue(Object)--------score
blog:liked:135   ----------- 11
1    ----------  1124

阿里云短信服务

把aliyun短信服务都自己封装到MessageUtils

只需要

这样调用即可 

存入redis的key和value

login:code:{phone}--------->验证码

login:token:{token}---------->userDTO

流程 

关键凭证还是靠的:前端那自己的token去找redis里的token看找不找得到,如果redis里面的token被删了,就是说你得重新登陆了,重新来个token给redis

1.短信登陆注册

->保存redis,{token  ---> userDTO}//存到redis---- token->userDTO,一方面便于快速取出user信息,另一方面用token作为登录凭证------30minTTL

---->返回token给前端,以便于客户在浏览器可以用token证明自己登陆了

2.此后每次操作校验登录状态

--->前端发起请求,用前端浏览器的token作为authorization请求头,传给了后端,

---->后端利用authorization作为token去redis获取userDTO,拿到自己作为用户的信息来证明登录了

------>如果发现前端没有token或者 后端那这前端token找不到redis对应的tokon->user,那也完蛋了,不放行

--->把userDTO放到本次请求线程的ThreadLocal方便后端全局调用,并刷新有效期

--------->判断是否放行

3.关于拦截器

class RefreshTOkenINterceptor{
    preHandle(request,response,handler);{
        //获取请求头中的token
        //token换取redis的userDTO
        //userDTO存入threadLocal
        //刷新token的TTl
    }
}

loginInterceptor{
    preHandle()
    {
        //读取threadLoacl中是否有用户
        //有-》放行
        //没有-》拦截
    }
}

 同一个用户通过多个拦截器,整个过程中都是同一个thread,同一个ThreadLocal

后端在用户登录之后返回用户的token给前端,前端把authori = token

dto的意义

因为我们本来要把user存到存到的是redis,但是redis是内存里存的肯定存的内容要求精简,所以我们选择存UserDTO (只包含user中部分信息内容)

给token设置有效期

让30分钟自动删除不继续访问操作的某用户的token---->清楚了redis占用----->也让用户30分钟得重新登录

优化用户体验(用户30分钟得重新登录)---->转为用户30min不操作才重新登陆---->拦截器中对每次操作请求都preHandle成功return之前进行刷新token的TTL

拦截器的类没有交给Spring

由于拦截器 LoginInterceptor implments HandlerInterceptor只是实现了类,但是没有类头上@XX的注解,没有交给Spring去认识------》所以在LoginInterceptor类里面用不了@Resource------>得自己去找StringRedisTemplate的实例

Constants

把一些重复使用的常量统一写道同一个Constants---->避免后续手动写错

implements Serializable的作用implements Serializable的作用_am540的博客-CSDN博客

概述:允许变成二进制之类的继续传输

    什么情况下需要序列化:

        1.     当你想把的内存中的对象写入到硬盘的时候(比如想要连接MYSQL,然后写的entity类需要implements serializable。

        2.     当你想用套接字在网络上传送对象的时候。

        3.     当你想通过RMI传输对象的时候。

关于UserHodler

作用:主要目的就是后端写程序时候方便调取当前登录用户的User

每次用户的每1次请求都是 从线程池选一个空闲线程,所以当用户登录之后,直接把他的User信息存入ThreadLocal来方便我后端随时调用本次登录的用户User 

2.商户查询缓存(不采用SpringCache,而是尝试原理实现) 2023-4-13

功能:

直接从1s->10ms 

流程:

opsForValue().increment(key,delta)

就会让redis里面的这个key对应的value进行自增delta,默认为1

increment()方法是实现递增,对于同一个KEY,执行一次,如果key存在,则把value的值增加delta,

3 探店笔记

在实际开发中图片一般会放在nginx上或者是云存储上。

upload上传有两种方案

1.上传到aliyun之类的oss

2.上传到nginx的前端服务器

这里选的是2

需求:

1.点赞功能:

用户可以对某笔记点赞一次,再次点击则会取消点击

        如何判断是否某用户点赞过,查询Redis按照BlogId,返回这篇笔记点赞过的用户,看有没有该用户, 采用redis的ZSet缓存     Key:{BlogId}  Value:[{userId,score:点赞时间}]

2.查询该笔记前五个点赞的用户

        采用redis的ZSet缓存,以点赞时间作为Score

注意:这里的redis只存了UserId!而不是保存User所有信息

发布笔记是简单的新增功能+上传功能

4.好友关注推送(Feed流)

登录用户关注或者取消关注某用户

  • 将当前登录用户与被关注用户 关系存入sql
  • 用redis缓存当前登录用户关注了哪些用户
  • 将当前登录用户作为Key,被关注用户作为Value,存入redis以set

关注推送(Feed流)

推模式:up发布博客之后,直接把新博客推送给粉丝邮箱

拉模式:当粉丝打开首页准备浏览新博客,系统才开始拉取关注的人的新博客

在这里简单采用推模式

需求:

  • 修改新增探店笔记的业务,在保存blog到数据库的同时,推送到粉丝的收件箱 //采用单纯推模式

  • 收件箱满足可以根据时间戳排序,必须用Redis的数据结构实现

  • 查询收件箱数据时,可以实现分页查询

分析:

  1. 每次下滑达到分页限制将会发起请求查询下一页滚动分页
  2. 前端请求,带有lastminTime,offset(这里的offset指从所有满足<=lastminTime的跳过前offset个再开始)
  3. 后端拿着前端给的上次查询末尾的时间戳+offset去定位,本次返回Blog的起始位置
  4. 后端返回的,List<Blog>本次返回的笔记,minTime,offset

如何实现Feed流的滚动分页 

  1. 用Redis的ZSet缓存接收邮箱---------Key是某个粉丝的UserId,Value是被推送的博客,Score是时间戳
  2. 上次读取的是minTime = 5,offset =1---->代表本次要返回的Blog要从time<=5的第2个开始
  3. 第一次最顶端第一次请求的minTime =MAX,offset = 0
  4. MybatisPlus的query().list()方法源码就是用select from where IN 查的

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fars

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值