# Project **Repository Path**: qyaa/Project ## Basic Information - **Project Name**: Project - **Description**: No description available - **Primary Language**: CSS - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-03-19 - **Last Updated**: 2021-06-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 项目描述(原始代码) ### 项目名称:闲聊社区 ### 技术框架:Spring + SpringMVC+ Mybatis +Redis + Elasticsearch ### 工作目标: + 完成从用户注册、登录、验证到讨论区及其踩赞功能,站内信,关注列表,热门话题,新鲜事推荐等一系列功能的开发工作 ### 主要工作的描述: + 用户在注册的同时生成一个随机的 Salt值结合用户密码进行md5加密;在用户登录时生成一个随机的token 值和用户信息进行绑定并设置过期时间,利用拦截器验证 token 对用户的登录进行安全验证。 + 建立字典树存储敏感信息,并对比用户发布的贴子和发送的站内信进行敏感词过滤 + 根据排序算法对热门话题进行优先级排序。 + 利用异步队列和 Redis 实现问题踩赞、关注列表以及点赞关注等事件的站内信通知。 + 使用推拉模式针对不同用户的粉丝进行新鲜事的推荐等。 + 使用 Elasticsearch实现对讨论区问题的搜索。 ## 注册功能 + 1. 用户名合法性检测(长度,敏感词,重复,特殊字符) + 2. 密码长度要求 + 3. 密码salt加密,密码强度检测(md5库) ## 登录功能 + 利用签名算法生成一个token值并设置过期时间,下次发起登录请求时携带token进行验证即可 + 注意: + 客户端请求服务器的时候,必须将token放到header中 + 客户端请求服务器每一次都需要带上token ## 评论功能 + 统一的评论服务,覆盖所有的实体评论,字段如下图评论表 + 敏感词过滤,利用前缀树存储敏感信息,进行过滤操作 ## 排序算法 + score = (like - 1) / (T + 2) + score是权重 + like是点赞数 + T是距发表的小时 ## 异步队列 + redis的异步队列用list实现,将事件推入队列中 + lpush rpop(左进右出) ## 点赞功能 + key 为问题Id,value为用户集 + 1.用户对某个问题进行点赞 + 2.先进行判断,该用户是否点赞过该问题 + 3.如果没有,则将该用户添加到redis set中的用户集 + 4.如果有,则删除用户集中的用户 ## 推拉模式 + 当用户的 Feed 流还不存在的时候,为该用户创建一个属于他自己的关注页 Feed 流 + 遍历一遍关注列表,取出所有关注用户的 feed,将 feedId 存放到 redis 的 sortSet + 关键点: + 初始化数据:初始化的数据需要从数据库中加载出来。 + key 值:sortSet 的 key 值需要使用当前用户的 id 做标识。 + score 值:如果是 Timeline 类型,直接取 feed 创建的时间戳即可。如果是 rank 类型,则把你的业务对应的权重值设进去。 + [feed流设计](https://blog.csdn.net/dearKundy/article/details/103216433?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161918055316780265494787%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=161918055316780265494787&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v29-3-103216433.pc_search_result_no_baidu_js&utm_term=redis%E5%AE%9E%E7%8E%B0%E6%8E%A8%E6%8B%89%E6%A8%A1%E5%BC%8F) ## 问题搜索 + [初步学习](https://qyaa.gitee.io/qyaa/2020/12/01/elasticsearch/#more) + es+Ik分词器+head插件 + id,title,comment来建立索引 ## 项目中的sql表 ### comment表(评论表) ![comment.png](https://i.loli.net/2020/11/26/bicXfp4zFRrKgu1.png) ### feed表(新鲜事) ![feed.png](https://i.loli.net/2020/11/26/fPYcIeJl7dk4Q8L.png) ### login_ticket表(session) ![login_ticket.png](https://i.loli.net/2020/11/26/mpwLtZWal2R7foc.png) ### message表(站内信) ![message.png](https://i.loli.net/2020/11/26/wNTmvn8pO9ZlYyk.png) ### question表 ![question.png](https://i.loli.net/2020/11/26/GvlQ9KVqJyIoN5C.png) ### user表 ![user.png](https://i.loli.net/2020/11/26/JqoUShPFsf7NaOx.png) ## redis的点赞点踩用set实现 sadd like xxx sadd like xxx sadd read xxx