仿牛客论坛项目全面大总结

本文全面总结了仿牛客论坛的核心功能实现,包括发帖、评论、私信、转发、点赞和关注等。在发帖时,使用JS异步提交,信息存储在DB、ES和Redis中。评论功能涉及多级评论,通过kafka处理评论事件。私信功能允许用户发送消息。转发功能将页面转化为图片存储于七牛云。点赞功能利用Redis管理,防止频繁操作数据库。关注功能通过Redis存储关注关系并发送系统通知。所有操作触发相应的系统通知,存储在数据库中,便于用户查看。
摘要由CSDN通过智能技术生成
1.核心功能:

 

     - 发帖、评论、私信、转发;
     - 点赞、关注、通知、搜索;
     - 权限、统计、调度、监控;
2.核心技术:
     - Spring Boot、SSM
     - Redis、Kafka、ElasticSearch
     - Spring Security、Quatz、Caffeine
3.项目亮点:
     - 项目构建在Spring Boot+SSM框架之上,并统一的进行了状态管理、事务管理、异常处理;
     - 利用Redis实现了点赞和关注功能;
     - 利用Kafka实现了异步的站内通知;
     - 利用ElasticSearch实现了全文搜索功能,可准确匹配搜索结果,并高亮显示关键词;
     - 利用Caffeine+Redis实现了两级缓存,并优化了热门帖子的访问。
     - 利用Spring Security实现了权限控制,实现了多重角色、URL级别的权限管理;
     - 利用HyperLogLog、Bitmap分别实现了UV、DAU的统计功能,100万用户数据只需*M内存空间;
     - 利用Quartz实现了任务调度功能,并实现了定时计算帖子分数、定时清理垃圾文件等功能;
     - 利用Actuator对应用的Bean、缓存、日志、路径等多个维度进行了监控,并通过自定义的端点对数据库连接进行了监控。
实现了项目部署上线,日访问量到达200+(很欣慰了)

 开始总结

图中的下方三行是基石。
原图中带下划线的和带@的内容是重点内容。
算法:前缀树过滤敏感词。
数据结构:Redis的数据结构。Redis有许多种数据结构,每种数据结构适合解决什么样的问题,适合缓存什么样的数据。
Kafka:重点是生产者与消费者模式,只有你理解了,才能明白什么时候用哪些功能来解决什么问题。
ElasticSearch:重点是它的数据结构,以索引(表)方式来存。建议找文章自己学习ES的索引。
Caffeine:本地缓存,有一定局限性,把它和Redis一起回顾,因为它们都是缓存。
从运维角度来讲整个项目(就是分布式部署)
静态资源(图片)和动态资源(controller)是部署在两个服务器上的。比如:牛客网的是在域名 nowcoder.com 上,牛客网的图片是在 static.nowcoder.com 上,这两个是不同的域名,会对应到两个不同的服务器。
客户端找nginx请求动态资源,找CDN请求静态资源。
nginx:能对服务器做反向代理,如果你有多个服务器,它能对服务器做负载均衡。nginx会主从备份,即有两台服务器,一台处理客户端请求,一台只是备份。
CDN:把你的资源部署到各地的多个服务器上,用户访问网站时,会从最近的服务器加载资源。
有多台服务器,nginx会把客户端请求发送到某一台服务器,每台服务器中都有项目community和本地缓存。
数据库通常要做读写分离的,一台数据库复制读,一台数据库负责写。负责写的数据库在写入数据以后,会把数据同步到负责读取的数据库里。
为什么Redis、Kafka、ElasticSearch都是部署多个,但是数据库却只进行主从备份?因为数据库部署和它们一样做集群式部署的话的话,那么就要处理分布式事务,这个比较麻烦,所以我们一般尽量避免这种情况。而且,一般的业务也达不到要部署多个数据库,因为在访问数据库前,会先访问本地缓存,再访问Redis,最后都没有才访问数据库。
我们用的文件服务器是七牛云。

咋们就从核心功能处开始捋,一个一个功能点开始总结实现过程:

核心功能:

   发帖:

      点击发布帖子按钮,输入帖子标题内容等信息后发布,以JS异步请求的方式进行提交,首先判断该线程中有无用户信息(在登录成功是会将用户信息与本线程的id进行键值对存储,保证了多线程情况下安全)即判断有无登录,已登录则初始化帖子信息将其添加至DB中,并且触发发帖事件,采用kafka信息队列来完成,将帖子信息添加至ES中,通知再将其存入Redis中计算帖子的分值,用来在最热列表中展示出来:

添加帖子

// 发布帖子
    @RequestMapping(path = "/add",method = RequestMethod.POST)
    @ResponseBody
    public String addDiscussPost(String title,String content){
        User users = hostHolder.getUsers();
        if(users == null){
            return CommunityUtil.getJSONString(403,"你还没有登录!");
        }

        DiscussPost post=new DiscussPost();
        post.setUserId(users.getId());
        post.setTitle(title);
        post.setContent(content);
        post.setCreateTime(new Date());
        discussPostService.addDiscussPost(post);

        // 触发发帖事件  添加至es中
        Event event = new Event()
                .setTopic(TOPIC_PUBLISH)
                .setUserId(users.getId())
                .setEntityType(ENTITY_TYPE_POST)
                .setEntityId(post.getId());
        eventProducer.fireEvent(event);

        // 计算帖子分数
        String redisKey= RediskeyUtil.getPostScoreKey();
        redisTemplate.opsForSet().add(redisKey,post.getId());

        return CommunityUtil.getJSONString(0,"发布成功!");
    }
kafak消费者身份,ES同样添加数据
// 消费  发帖事件 es添加数据
    @KafkaListener(topics = {TOPIC_PUBLISH})
    public void handlePublishMessage(ConsumerRecord record){
        if(record == null && record.value() == null){
            logger.error("消息的内容为空!");
            return;
        }

        Event event = JSONObject.parseObject(record.value().toString(), Event.class);
        if(event == null){
            logger.error("消息格式错误!");
            return;
        }

        DiscussPost discussPost = 
        discussPostService.selectDiscussPostById(event.getEntityId());
        elasticsearchService.saveDiscussPost(discussPost);
    }

评论:

  评论这一块数据库表comment结构得先捋一下,entity_type字段(int型)1:表示此条评论是对帖子进行的一个评论,2:表示此条评论是对1级评论进行的2级评论;entityId字段(int型&#x

最低0.47元/天 解锁文章
仿牛客项目总结
weixin_44768962的博客
09-05 1248
社区首页分为最新最热,数据库利用动态sql,0和1代表最新最热排序规则,利用@Requestparam注解默认访问最新,手动封装分页信息类,设置分页的总条数,设置分页的访问路径,调用业务层实现首页功能,list封装map最后装到model页面显示。
抖音音视频开发,10天用Flutter撸了个高仿携程App,积累总结
m0_57079376的博客
05-06 791
前言 碎碎念:二本渣校,却拿到了字节跳动Offer!我是如何做到的,我把经历写成文章分享给大家,希望对你们能有一些帮助!之前在牛客许愿,后来来了offer就忘记了要发,现在赶紧补上。三次面试是一天内完成的,意向书是面试结束后过了一周拿到的。 我投的大方向是:抖音/抖音火山版/直播。复盘一下:其实我总共被问得问题并不多,主要是实习问的较多,所以建议大家实习做的东西一定要保证能说出目的意义,讲清楚技术实现,以及相关的技术延伸 面试复习路线图 我之前复习,大多都在20点以后,因为晚上比较能集中注意力,制定一个学习
仿牛客论坛项目总结
weixin_47414034的博客
01-03 2335
通过表单提交数据,服务端接收到数据之后在后台查询账号是否已经被注册,邮箱是否已经被注册,如果没有,服务端就发送一封激活邮件给注册的邮箱(发送邮件功能,通过导入spring mail的maven坐标依赖),用户点击邮箱中的链接,成功激活。这样就算不法分子得到数据库的用户密码的MD5值,也无法知道用户的密码,用户登录的时候,用户输入的密码md5加密之后的结果如果和数据库中的MD5值相等,就表明密码正确。(6)status 帖子的状态,0表示这是一个正常的帖子,1表示是精华帖,2表示被拉黑了。
仿牛客网讨论社区项目—优化网站性能
罗密欧与猪过夜的博客
04-06 4486
性能优化 1.考虑加入缓存优化 优化热门帖子列表 GitHub中搜索caffeine 在Maven Repository搜索caffeine配置文件,在resources文件包内的pom.xml文件中导入相关的配置文件依赖,并修改properties文件。 # caffeine caffeine.posts.max-size=15 caffeine.posts.expire-seconds=180 优化discusspostservice @Service publi...
仿牛客网社区项目 全栈总结
qq_50209297的博客
02-08 1612
仿牛客网社区项目总结 第八章
仿牛客论坛项目部署总结
07-25 4261
📢 本文章通过实战记录相关问题以及提供解决方案。 👤 公众号:恩故事还在继续
嵌入式秋招总结(非技术总结)
weixin_45613903的博客
12-09 1097
先说本人情况,唯二C9两年制学硕,帝都211本科,仪器专业,机器人和无人机控制研究方向,一篇二区SCI(找工作时还未录用)和一篇中文核心,已签约华为15级.也曾因为长期疫情在家迷茫过,通过数月挣扎,算是给自己一个满意答复. 嵌入式方向比较尴尬的地方在于,既需要扎实的编程功底,也需要对硬件对操作系统有深入了解,向开发算法岗竞争竞争不过计算机科班的,向数字IC竞争也不擅长,嵌入式大厂需求量又不是太多,学的和会的东西一点不比别人少.已知好一点的私企包括阿里,华为,小米,网易,大疆,中兴,美的等,外企德国博世,施耐
【校招分享】Java非科班自学指南
slw213106的博客
11-24 1442
作者:一星如月看多时 链接:【校招干货】Java非科班自学指南V1.0_招聘信息_牛客网 来源:牛客网 本文针对应届校招生,面向大厂面试学习,讲究打牢基础的同时追求速成,适合还有一年以上时间参加校招的在校同学,时间较少的同学也可以参考,针对性学习。 本文针对非科班,从0开始,带你成为一名大厂校招Java工程师。 非科班学习途径无外乎网课+图书,所以本文会大量推荐网课,有些是免费的,有些是付费的,由于牛客限制,付费视频都不贴链接,请自行搜索并根据个人经济条件判断是否购买。 .
两个月实战
qq_45163356的博客
04-26 2387
1:js的全部复习 后盾人js复习完,做完笔记起步入门 | 后盾人 牛客刷完js的题 2:typeScript的学习 后盾人typescript学习介绍 | 后盾人 3:vue3的学习 VUE3最新最全实战项目2021课程_哔哩哔哩_bilibili 网易云后端文档网易云音乐 NodeJS 版 API 4:vue3结合typescript项目 简单的:2022最新Vue3.0+TypeScript项目实战TypeScript教程TypeScript视频教程TypeSc........
基于SpringBoot 仿牛客网讨论社区项目
04-03
仿牛客网讨论社区项目: 主要技术架构: SpringBoot Spring SpringMVC MyBatis Redis Kakfa Elasticsearch Spring Security Spring Actator 基于SpringBoot的社区平台,实现了牛客网讨论区的功能。实现了邮箱注册、验证码登录、发帖、评论、私信、点赞、关注、统计网站访问次数等功能,数据库使用Mybatis、Redis,使用Kafka构建系统通知,使用Elasticsearch构建全文搜索功能。 包含数据库文件、项目源码等
仿牛客社区项目笔记-项目发布与总结
qq_35484331的博客
05-24 1564
仿牛客社区项目笔记-项目发布与总结项目发布与总结1. 单元测试 项目发布与总结 分为。 1. 单元测试 引入Spring test 起步依赖。 保证测试方法的独立性。常用注解有: @BeforeClass:在测试类加载之前执行 @AfterClass: 在测试类销毁时执行 @Before: 在测试方法执行前执行(创建测试数据) @After: 在测试方法执行后执行(删除测试数据) @Test:测试方法(执行需要测试的方法) ...
仿牛客项目总结(一)
weixin_46892292的博客
07-10 552
仿牛客项目总结
仿牛客社区项目的技术总结
Greedy Hat的博客
03-11 2142
仿牛客社区项目的技术总结
仿牛客项目总结(一、二)-- 简单业务功能
weixin_51930617的博客
09-19 380
牛客社区项目总结
牛客论坛项目总结
热门推荐
huahuahuaz的博客
07-01 1万+
仿牛客项目kafka
最新发布
08-29
Kafka是一个高性能的分布式消息队列系统,可以实现高吞吐量、低延迟的消息传递。它支持点对点和发布-订阅两种消息传递模式。在仿牛客项目中使用Kafka可以实现消息的异步处理和分布式架构。 使用Kafka的第一步是创建一个主题(topic),主题既是消息的类别,也是消息在Kafka中的存储位置。可以使用命令行工具kafka-topics.bat来创建主题。例如,可以使用以下命令来创建一个名为test的主题: bin\windows\kafka-topics.bat --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test 上述命令中,--bootstrap-server参数指定了Kafka服务器的地址和端口,--replication-factor参数指定了主题的副本数,--partitions参数指定了主题的分区数。创建主题后,可以向主题中发送消息,并由消费者进行消费。 要列出已经存在的主题,可以使用以下命令: kafka-topics.bat --list --bootstrap-server localhost:9092 需要注意的是,以上命令中的localhost:9092是Kafka服务器的地址和端口,根据实际情况进行修改。 总结起来,在仿牛客项目中使用Kafka,首先需要创建一个主题,然后可以使用相关命令行工具进行消息的发送和消费。这样可以实现消息的异步处理和分布式架构。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [仿牛客论坛项目学习记录——5 Kafka 构建TB级异步消息系统](https://blog.csdn.net/dadayangpei/article/details/127173098)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
写文章

热门文章

  • 仿牛客论坛项目全面大总结 6974
  • 黑马WEB教程个人错误集(http://java.sun.com/jsp/jstl/core jar包错误) 3103
  • JSP页面将中文字符写入MYsql数据库出现?号乱码 1446
  • Json(检测用户是否存在)案例+Mysql 829
  • 算法笔记(链表篇) 382

分类专栏

  • 字符串 1篇
  • 笔记 5篇
  • 算法 4篇
  • 数组 1篇
  • 链表 1篇
  • 哈希表 1篇
  • java 1篇
  • 论坛类项目 1篇

最新评论

  • 仿牛客论坛项目全面大总结

    sinat_59818620: 没有剩下的内容了吗

  • 仿牛客论坛项目全面大总结

    weixin_44927765: 楼主,请问项目难点是什么啊?麻烦具体回答一下下

  • 仿牛客论坛项目全面大总结

    骑驴去学习: 请问有源码可以学习一下吗?主要是想知道怎么对热门帖子的访问进行优化的

  • 仿牛客论坛项目全面大总结

    南川~北: 楼主有源码吗

  • 仿牛客论坛项目全面大总结

    qq_45039459: 楼主有完整代码不,想参考学习一下

最新文章

  • Redis常见面试题
  • 数据库 面试题
  • Java基础(面试题)高频重点面试题
2022年8篇
2021年3篇

目录

目录

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值

深圳坪山网站建设公司枝江网站搜索引擎优化陕西优化网站靠谱南平市网站seo优化联系方式网站优化的代码信阳网站搜索优化好口碑百度网站优化有实力的教育行业网站优化多少钱青岛网站优化的价格网站做优化认可d火28星细心如何给网站做好网站结构优化诚信通网站优化太原网站优化推广渠道巩义关键词网站优化菏泽网站优化出售电商类网站图片优化方案网站品牌怎么优化竞价网站优化浦东新区公司网站优化价格费用呼和浩特seo网站优化软件白云区网站优化推广饮料网站优化哪个公司好山东网站关键词优化多少钱胶州网站优化排名深圳网站竞价优化运营文章视频标题优化软件网站福建网站排名优化培训浦东网站优化报价百度竞价包年推广木材行业网站优化方案藁城公司网站优化香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

深圳坪山网站建设公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化