⽜客论坛的笔记

项目描述:


        一个基本功能完整的论坛项目。项目主要功能有: 基于邮件激活的注册方式,基于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做系统通知?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

脑电情绪识别

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

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

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

打赏作者

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

抵扣说明:

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

余额充值