当前位置: 首页 > news >正文

⽜客论坛的笔记

项目描述:


        一个基本功能完整的论坛项目。项目主要功能有: 基于邮件激活的注册方式,基于MD5加密与加盐的密码存储方式,登录功能加入了随机验证码的验证,实现登陆状态检查、为游客与已登录用户展示不同界面与功能。支持用户上传头像,实现发布帖子、评论帖子、发送私信与过滤敏感词等功能。实现了点赞,关注与系统通知功能。

(主要工作)项目角色:


后端各部分模块开发;数据库表的设计

核心功能具体实现:

1.通过对登录用户颁发登录凭证,记录登录用户登录状态,使用拦截器进行登录状态检查,解决了http无状态带来的缺陷,保护特定需登录使用的资源。
2.对频繁需要访问的数据,如用户基本信息使用Redis作为本地缓存,提高服务器性能。

3.使用Redis的集合数据类型来解决踩赞、相互关注功能,采用事务管理,保证数据的正确,采用“先更新数据库,再删除缓存”策略保证数据库与缓存数据的一致性
4.使用Kafka作为消息队列,在用户被点赞、评论、关注后,放入异步队列,以系统通知的方式推送给用户,对系统进行解耦、削峰。

项目收获:


1.熟悉了在Spring Boot框架下开发项目的操作流程
2.熟悉了Redis的使用场景与应用Redis的好处。
3.了解了Kafka作为消息队列的基本使用,了解了Kafka在项目中的作用

技术栈

Spring Boot、SSM、Redis、Kafka、ElasticSearch、Spring Security、Quatz、Caffeine

项目亮点

1.项⽬构建在Spring Boot+SSM框架之上,并统⼀的进⾏了状态管理、事务管理、异常处理;

2.利⽤Redis实现了点赞和关注功能,单机可达5000TPS;

3.利⽤Kafka实现了异步的站内通知,单机可达7000TPS;

4.利⽤ElasticSearch实现了全⽂搜索功能,可准确匹配搜索结果,并⾼亮显示关键词;

5.利⽤Caffeine+Redis实现了两级缓存,并优化了热⻔帖⼦的访问,单机可达8000QPS。

6.利⽤Spring Security实现了权限控制,实现了多重⻆⾊、URL级别的权限管理;

7.利⽤HyperLogLog、Bitmap分别实现了UV、DAU的统计功能,100万⽤户数据只需*M内存空间;

8.利⽤Quartz实现了任务调度功能,并实现了定时计算帖⼦分数、定时清理垃圾⽂件等功能;

9.利⽤Actuator对应⽤的Bean、缓存、⽇志、路径等多个维度进⾏了监控,并通过⾃定义的端点对数据库连接进 ⾏了监控。

如何记录⽤户的登陆状态?

        ⽤户登录之后,会给⽤户创建⼀个ticket,并放⼊cookie返回给浏览器,下⼀次再访问时,浏览器带上 cookie(ticket),服务端可以根据cookie确定⽤户的登录状态,以及通过ticket查询到⽤户id,通过⽤户id,就 可以知道当前⽤户的具体信息了,把user放⼊model,再由模板引擎渲染后,返回HTML给客户端浏览器。显示⽤户的登录信息,是所有的请求都要⼲的事,因此这个业务逻辑由拦截器实现!!

cookie是什么?和session有什么区别? cookie和session的关系 

为什么⽤Redis

1、Redis是⼀种基于键值对的NoSQL数据库,它⽀持多种数据结构: 字符串(String)、哈希(hashs)、列表(lists)、集合(sets)、有序集合(sorted sets)等

2、Redis将所有的数据都存在内存中,所以它的读写性能⼗分惊⼈。 同时,Redis还可以将内存中的数据以快照或者⽇志的形式保存到硬盘上,以保证数据的安全性。

3、缓存、排⾏榜(热⻔帖⼦)、计数器、社交⽹络(点赞数)、消息队列等。

如何优化登陆模块

1.使用Redis存储验证码
                验证码需要频繁的访问与刷新,对性能要求较高
                验证码不需永久保存,通常在很短的时间后就会失效。
                分布式部署时,存在Session共享的问题

2.使用Redis存储登录凭证
                处理每次请求时,都要查询用户的登录凭证,访问的频率非常高.

3. 使用Redis缓存用户信息
                处理每次请求时,都要根据凭证查询用户信息,访问的频率非常高。

1. 使⽤Redis存储验证码的步骤

        当⽤户点击刷新验证码时,服务端⾸先给当前需要登陆的游客,设置⼀个随机字符串(kaptchaOwner),⽤于标识 当前这个游客,然后将随机字符串存⼊到cookie中,返回给浏览器,然后服务端的redis保存 key:随机字符串, value:验证码 。

        接着⽤户输⼊⽤户名,密码,验证码,再次点击登陆时,服务端会从cookie中拿到kaptchaOwner,通过它,可以从 Redis中得到正确的验证码,然后与⽤户输⼊的验证码做⽐较,看是否⼀致。

如何⽤kafka做系统通知?

http://www.lryc.cn/news/199251.html

相关文章:

  • JS逆向分析某枝网的HMAC加密、wasm模块加密
  • 论坛介绍|COSCon'23开源商业(V)
  • 在word、ppt、excel编辑软件标题栏顶部左上角加入自定义功能:另存为、导出PDF
  • Flink学习笔记(三):Flink四种执行图
  • 堆-----数据结构
  • 震撼登场 | 拓世科技集团新品亮相成为2023世界VR产业大会全场焦点
  • 后端接口的查询方式
  • Maven首次安装配置
  • 使用html2canvas将html转pdf,由于table表的水平和竖直有滚动条导致显示不全(或者有空白)
  • EDID详解
  • 浅谈云原生
  • 【K8S】Kubernetes
  • 面试题 01.01. 判定字符是否唯一
  • C++(Qt)软件调试---linux使用dmesg定位程序崩溃位置(14)
  • 38 WEB漏洞-反序列化之PHPJAVA全解(下)
  • LeetCode 面试题 10.10. 数字流的秩
  • Vue3项目上线打包优化
  • 【算法题】2525. 根据规则将箱子分类
  • python字典
  • thinkphp队列的使用?
  • 【数据结构】排序--归并排序
  • 批量修改视频尺寸:简单易用的视频剪辑软件教程
  • 四川云汇优想:短视频矩阵运营方案
  • vue中如何获取到当前位置的天气
  • C++三角函数和反三角函数
  • Linux篇 五、Ubuntu与Linux板卡建立NFS服务
  • 通讯协议学习之路:IrDA协议协议理论
  • 互联网摸鱼日报(2023-10-20)
  • C/C++ 快速入门
  • 【Git】升级MacOS系统,git命令无法使用