随笔分类 - 仿牛客网社区项目
摘要:热榜 Spring Quartz(将数据存储到数据库,分布式时可以共享数据) 核心调度接口Scheduler 定义任务的接口Job的execute方法 Jobdetail接口来配置Job的名字、组等 Trigger接口配置Job的什么时候运行、运行频率 QuartzConfig:配置 → 数据库 →
阅读全文
摘要:统计访问量 UV(Unique Visitor) 独立访客,需通过用户IP排重新统计数据。 每次访问都要进行统计。 HyperLoglog,性能好,且存储空间小。 DAU(Daily Active User) 日活跃用户,需通过用户ID排重新统计数据。 访问过一次,则认为其为活跃。QW Bitmap
阅读全文
摘要:置顶、加精、删除 功能实现 点击“置顶”、“加精”、“删除”,修改帖子的状态 在DiscussPostMapper增加修改方法 DiscussPostService、DiscussPostController相应增加方法,注意在Es中同步变化 要在EventConsumer增加消费删帖事件 修改ht
阅读全文
摘要:引入SpringSecurity框架 1. Spring Security 介绍 简介 Spring Security是一个专注与为Java应用程序提供身份认证和授权的框架,它的强大之处在于它可以轻松扩展以满足自定义的需求。 特征 对身份的认证和授权提供全面的、可扩展的支持。 防止各种攻击,如会话固
阅读全文
摘要:6.5 开发社区搜索功能 搜索服务 将帖子保存至Elasticsearch服务器。 对贴子实体类DiscussPost用注解进行相关配置 从Mybatis取数据存入 在dao层创建DiscussPostRepository类,继承ElasticsearchRepository接口即可,它集成了CRU
阅读全文
摘要:Spring boot整合Ealsticsearch 引入依赖 spring-boot-starter-data-elasticsearch 配置Elasticsearch Redis和Es底层都用到了Netty,有启动冲突。解决:在CommunityApplication类加入初始化方法进行配置。
阅读全文
摘要:消息通知页面 通知列表 显示评论、点赞、关注三种类型的通知 通知详情 分页显示某一类主题所包含的通知 未读消息 在页面头部显示所有的未读消息数量 1.新增MessageMapper方法 // 查询某个主题下最新的通知 Message selectLatestNotice(@Param("userId
阅读全文
摘要:触发事件 触发事件 评论后,发布通知 点赞后,发布通知 关注后,发布通知 处理事件 封装事件对象 开发事件的生产者 开发事件的消费者 创建对象实体 public class Event { //事件类型 private String topic; //消息发送方Id,1为管理消息 private i
阅读全文
摘要:优化登录模块 使用Redis存储验证码 验证码需要频繁的访问与刷新,对性能要求较高。 验证码不需永久保存,通常在很短的时间后就会失效。 分布式部署时,存在Session共享的问题。 使用Redis存储登录凭证 处理每次请求时,都要查询用户的登录凭证,访问的频率非常高。 使用Redis缓存用户信息 处
阅读全文
摘要:关注列表 粉丝列表 业务层 查询某个用户关注的人,支持分页。 查询某个用户的粉丝,支持分页。 表现层 处理“查询关注的人”、“查询粉丝”请求。 编写“查询关注的人”、“查询粉丝”模板。 一、业务层 1.修改FollowService // 查询某用户关注的人 public List<Map<Stri
阅读全文
摘要:关注 需求 开发关注、取消关注功能。 统计用户的关注数、粉丝数。 关注 若A关注了B,则A是B的Follower(粉丝),B是A的Followee(目标)。 关注的目标可以是用户、帖子、题目等,在实现时将这些目标抽象为实体。 修改RedisKeyUtil public class RedisKeyU
阅读全文
摘要:我收到的赞 重构点赞功能 以用户为key,记录点赞数量 increment(key),decrement(key) 开发个人主页 以用户为key,查询点赞数量 一、重构点赞功能 增加RedisKeyUtil public class RedisKeyUtil { //key的分隔符 private
阅读全文
摘要:点赞功能 点赞 支持对帖子、评论点赞。 第1次点赞,第2次取消点赞。 首页点赞数量 统计帖子的点赞数量。 详情页点赞数量 统计点赞数量。 显示点赞状态。 一、点赞 为了提高Key的可用性,编写一个RedisKeyUtil来拼接RedisKey public class RedisKeyUtil {
阅读全文
摘要:Springboot整合redis 引入依赖 spring-boot-starter-data-redis 配置Redis 配置数据库参数 编写配置类,构造RedisTemplate 访问Redis redisTemplate.opsForValue() redisTemplate.opsForHa
阅读全文
摘要:全局异常控制日志 需求: 帖子模块 评论模块 消息模块 AOP的概念: Aspect Oriented Programing,即面向方面(切面)编程。 AOP是一种编程思想,是对OOP的补充,可以进一步提高编程的效率。 AOP的术语: AOP的实现 AspectJ AspectJ是语言级的实现,它扩
阅读全文
摘要:统一异常处理 @ControllerAdvice 用于修饰类,表示该类是Controller的全局配置类。 在此类中,可以对Controller进行如下三种全局配置:异常处理方案、绑定数据方案、绑定参数方案。 @ExceptionHandler 用于修饰方法,该方法会在Controller出现异常后
阅读全文
摘要:发送私信 发送私信 采用异步的方式发送私信。 发送成功后刷新私信列表。 设置已读 访问私信详情时, 将显示的私信设置为已读状态。 还是以数据层业务层和表现层的顺序开发。 数据层 首先在MessageMapper里新增两个方法,一个新增消息,一个修改消息状态的方法。 //新增消息 int insert
阅读全文
摘要:新增评论 数据层 增加评论数据。 修改帖子的评论数量。 业务层 处理添加评论的业务:先增加评论、再更新帖子的评论数量。 表现层 处理添加评论数据的请求。 1、数据访问层 CommentMapper int insertComment(Comment comment); 1 <insert id="i
阅读全文
摘要:私信列表 私信列表 查询当前用户的会话列表, 每个会话只显示一条最新的私信。 支持分页显示。 私信详情 查询某个会话所包含的私信。 支持分页显示。 首先看一下数据库的设计,私信相当于一个对话功能,那么两个人就组成一个对话,这段对话里有A发给B的消息,有B发给A的消息,那么我们把发送者和接收者的id拼
阅读全文
摘要:显示评论 数据层 根据实体查询一页评论数据。 根据实体查询评论的数量。 业务层 处理查询评论的业务。 处理查询评论数量的业务。 表现层 显示帖子详情数据时,同时显示该帖子所有的评论数据。 1、实体类: public class Comment { private int id; private in
阅读全文
