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

news2025/1/17 3:07:07

目录

​编辑

1.解决短信登陆--2023.4.14

redis

数据类型

阿里云短信服务

存入redis的key和value

流程 

dto的意义

给token设置有效期

拦截器的类没有交给Spring

Constants

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

流程:

opsForValue().increment(key,delta)

3 探店笔记


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,那也完蛋了,不放行

--->刷新有效期

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

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---->避免后续手动写错

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所有信息

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/435348.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Cloud Alibab --Seata

事务特性 A(Atomic):原子性,构成事务的所有操作,要么都执行完成,要么全部不执行,不可能出现部分成功部分失败的情况。 C(Consistency):一致性,在事…

Tarjan算法求割点和桥

先进行一些定义,假设目前有一个无向连通图 割点:某点及其边去掉后,图不再连通 桥:某条边去掉后,图不再联通 tarjan算法求割点 不考虑子结点到父结点的情况 dfn(x) x实际杯访问的时间点 low(x) x通过图可回溯到的最…

22从零开始学Java之你知道return、break与continue的区别吗?

作者:孙玉昌,昵称【一一哥】,另外【壹壹哥】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 在上一篇文章中,壹哥给大家介绍了while、do-while两种循环结构,并且给大家总结…

KubeSphere 社区双周报 | OpenFunction 支持 Dapr 状态管理 | 2023.03.31-04.13

KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列社区动态。 本次双周报涵盖时间为:2023.03.31-2023.…

测试工具之JMH详解

文章目录 1 JMH1.1 引言1.2 简介1.3 DEMO演示1.3.1 测试项目构建1.3.2 编写性能测试1.3.3 执行测试1.3.4 报告结果 1.4 注解介绍1.4.1 BenchmarkMode1.4.2 Warmup1.4.3 Measurement1.4.4 Threads1.4.5 Fork1.4.6 OutputTimeUnit1.4.7 Benchmark1.4.8 Param1.4.9 Setup1.4.10 Te…

大数据实战 --- 美团外卖平台

目录 开发环境 数据描述 功能需求 数据准备 数据分析 RDD操作 Spark SQL操作 创建Hbase数据表 创建外部表 统计查询 开发环境 HadoopHiveSparkHBase 启动Hadoop:start-all.sh 启动zookeeper:zkServer.sh start 启动Hive: nohup …

Netty中的HttpServerCodec和HttpObjectAggregator

首先使用Netty搭建一个HttpServer,代码如下: public class App {public static boolean useEpoll false;static {String os System.getProperty("os.name");if (Objects.nonNull(os) && os.equalsIgnoreCase("linux") &a…

Git分支篇git branch和git checkout

分支作用 在开发过程中,项目往往由多人协同开发,那么将多人编写的代码汇总到一起就成了一个困难且复杂的工作,另外项目也需要备份和版本迭代,因此不能只有一个版本。因此分支就成为了优秀的解决方案。 分支相互独立,…

C++STL详解(九)--使用红黑树封装实现set和map

文章目录 控制底层红黑树模板参数模板参数中的仿函数map,set中的正向迭代器map,set中的反向迭代器[]下标访问运算符重载map的模拟实现代码map的模拟实现适用map,set容器的底层红黑树代码(修改版本) 控制底层红黑树模板参数 如果我们用一棵KV模型的红黑树同时实现map和set,我们…

【数据结构】八大排序算法(梭哈)

目录 1.直接插入排序2. * 希尔排序关于希尔排序的时间复杂度 3.选择排序4. * 堆排序5.冒泡排序6. * 快速排序6.1递归快排6.1.1 hoare版6.1.2 挖坑法6.1.3 前后指针法6.1.4 关于每个区间操作的结束位置总是小于key6.1.5 关于有序原数据的效率优化 6.2 非递归快排 7. * 归并排序7…

计算机网络考试复习——第五章

本章考察范围为5.1 5.3 5.4这三部分。 该层传输的单位是报文段 5.1 运输层协议概述: 5.1.1 进程之间的通信: 运输层是向它上面的应用层提供通信服务。它属于面向通信部分的最高层,同时也是用户功能的最低层。 屏蔽作用:运输层…

flutter系列之:如何自定义动画路由

文章目录 简介自定义跳转使用flutter动画基础实现一个自定义的route总结 简介 flutter中有默认的Route组件,叫做MaterialPageRoute,一般情况下我们在flutter中进行跳转的话,只需要向Navigator中传入一个MaterialPageRoute就可以了。 但是Ma…

让你的three.js动起来

让你的three.js动起来 简介 本节主要是给实例添加动画效果,以及加了一些小插件用以实现帧率检测、gui可视化配置、动态监听屏幕大小变化刷新和鼠标操控功能。 引入的插件js: three.jsdat.gui.jsStats.jsTrackballControls.js 实际效果: …

Java 线程状态有哪些?

文章目录 Java 线程状态有哪些?初始状态(NEW)可运行状态(RUNNABLE)就绪状态运行状态 阻塞状态(BLOCKED)等待状态(WAITING)超时等待(TIMED_WAITING&#xff09…

一次打靶场记录

题目提示 1、目录爆破 在对靶场进行信息收集、目录扫描之后发现结果存在www.zip,data.zp 两个备份文件 下载回来解压之后发现www.zip是网站备份文件,data.zip是数据库文件,存在一个maccms的数据库 苹果cms的数据库,导入本地数据库。 admin…

【并发编程Python】为什么Python这么慢

Python速度慢的所有原因 Python作为一门非常优秀的计算机语言,其速度慢给Python减了很多分,也是其一直被诟病的主要原因之一,通常情况下,Python比Java/C慢约5-10倍,在一些特殊的情况下Python甚至比C慢100~200倍&#x…

数据结构——B树和B+树

数据结构——B树和B树 一、B树1.B树的特征2.B树的插入操作3.B树的删除操作4.B树的缺点 二、B树B树的特征 平衡二叉树或红黑树的查找效率最高,时间复杂度是O(nlogn)。但不适合用来做数据库的索引树。 因为磁盘和内存读写速度有明显的差距,磁盘中存储的数…

玩转肺癌目标检测数据集Lung-PET-CT-Dx ——③整理、验证数据,建立Dataset对象

文章目录 数据整理整理出所有的dcm文件整理出所有的xml标注文件整理数据①——舍弃错误的标注文件整理数据②——两个标注文件指向同一个目标图片的情况封装函数,传入xml文件,显示标注效果 整理数据③——将PETCT的三通道图像转成平扫CT的单通道图像格式…

企业费控,驶向「一体化」

在数字化于企业内部各个环节实现平权、成为标配的当下,财务,这个被称为“控制企业生命力”的核心环节,是否应该拥有新的价值? 作者| 皮爷 出品|产业家 2022年年中,施伟和分贝通的团队接到一项“特殊需求”。 这个…

在职读研专业——劳动经济学

研究方向:劳动经济学主要研究劳动力市场现象及其所引起的劳动力资源配置等相关问题,包括劳动力供给、劳动力需求、就业、工资、人力资本投资、收入分配等。例如:劳动力市场失衡背后各种因素的变化,如何通过资源的配置使劳动资源配…