# 外部数据入社区库 ```mermaid sequenceDiagram 消费者 ->> 场次接口服务: 请求 场次接口服务 -->> 消费者: 返回 消费者 ->> DB: 写入,作品 消费者 ->> 班级学生接口服务: 请求 班级学生接口服务 -->> 消费者: 返回 消费者 ->> DB: 写入,学生作品 消费者 ->> Redis: 写入,推荐"最新ZSet" 消费者 ->> Redis: 写入,学生作品缓存 ``` # 写入排行榜数据 ```mermaid sequenceDiagram 定时脚本 ->> DB: 每天3点,查询前3K点赞数据 DB -->> 定时脚本: 响应 定时脚本 ->> Redis: 通过指定"推荐最热ZSet"排行,先移除,后添加 定时脚本 ->> DB: 将总作品记录表总赞数写入同学记录表 ``` # 清理同学过期数据 ```mermaid sequenceDiagram 定时脚本 ->> DB: 每天3点,查询作品表过期数据 DB -->> 定时脚本: 响应 定时脚本 ->> DB: 通过作品ID,删除学生过期作品数据 ``` # 查询推荐列表 ```mermaid sequenceDiagram API服务端 ->> Redis: 查询"6个推荐最热/6个最新ZSet"排行作品ID列表 Redis -->> API服务端: 响应结果 API服务端 ->> 本地内存: 通过作品ID请求Bigcache 本地内存 ->> DB: 本地内存没有查询DB DB -->> 本地内存: 通过作品ID存入Bigcache 本地内存 -->> API服务端: 返回结果 ``` # 查询同学列表 ```mermaid sequenceDiagram API服务端 ->> Redis: 根据StuID查询 Redis -->> API服务端: 响应列表结果 API服务端 ->> DB: 如果redis为空,查询DB DB -->> API服务端: 存入Redis,设置过期时间半小时,并响应 API服务端 ->> 本地内存: 通过作品ID请求Bigcache 本地内存 ->> DB: 本地内存为空,查询DB DB -->> 本地内存: 通过作品ID存入Bigcache 本地内存 -->> API服务端: 返回结果 ``` # 点赞 ```mermaid sequenceDiagram API服务端 ->> DB: 记录点赞记录 API服务端 ->> DB: 查询点赞总数 DB -->> API服务端: 返回点赞总数 API服务端 ->> DB: 记录点赞总数 API服务端 ->> Redis: 记录点赞ZSet ``` # 查询点赞 ```mermaid sequenceDiagram API服务端 ->> Redis: 查询多个作品点赞总数、学生是否点赞 Redis -->> API服务端: 返回多个作品点赞总数、学生是否点赞 ``` # 删除作品后,推荐列表实时跟新,同学列表需等半小时后过期 ```mermaid sequenceDiagram API服务端 ->> DB: 修改作品表状态 API服务端 ->> DB: 删除同学表记录 API服务端 ->> Redis: ZREM最新推荐列表 API服务端 ->> Redis: ZREM最热推荐排行榜 ```