Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

实现首页数据缓存以及入参 limit 限制为最大50 #122

Merged
merged 10 commits into from
Aug 18, 2023

Conversation

Lixuhuilll
Copy link
Contributor

"/copilot/query"接口添加首页数据缓存
"/copilot/query"接口和"/comments/query"接口入参 limit 限制为最多 50
实现了Issue #121 的前两项功能

* 因为 Get 请求传入的参数不是 JSON,所以没办法使用 Jackson 的注解直接实现别名
* 添加 @JsonAlias 和 @JsonIgnore 注解只是为了保障 Swagger 的文档正确显示
* (吐槽一下,同样是Get请求,怎么CommentsQueries是驼峰命名,到了CopilotQueries就成了下划线命名)
*/
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

因为后端是换语言重写开发的 评论区是现在java新开发的功能 其他则是继承之前C#的 (

@LuoRenMu LuoRenMu requested a review from dragove August 17, 2023 16:47
Comment on lines 165 to 169
/*
* 删除作业时,删除首页的所有缓存,因为此时首页内容可能发生变化
* 新增作业就不必,因为新作业显然不会那么快就登上热度榜和浏览量榜
*/
redisCache.removeCacheByPattern("home:*");
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

新作业不需要的话可以先加个简单的判断
缓存热度数据时将热度最小值同时放到缓存中,热度更新是一天一次的,且目前放在3点执行,很小概率会出现删除后由于缓存数据仍然驻留在页面上的情况
缓存浏览量数据时可以直接存入最小浏览量,这个数据比热度可靠

Copy link
Contributor Author

@Lixuhuilll Lixuhuilll Aug 17, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

但是如果缓存时间够长,期间就可能出现用户看得到热度榜上的作业,但作业实际被作者删除了的情况,显然会给用户带来困扰。目前新的逻辑通过Redis的Set集合记录被缓存的作业ID,当删除的作业处于缓存中时,清空对应的缓存。

@dragove
Copy link
Member

dragove commented Aug 17, 2023

好耶,关于下划线的问题我想的是可以先建一个POST版本的,然后后续前端有空迁移到使用驼峰命名的方式,最终干掉那些奇怪的代码。

@Lixuhuilll
Copy link
Contributor Author

又优化了一下缓存逻辑

@Lixuhuilll
Copy link
Contributor Author

好耶,关于下划线的问题我想的是可以先建一个POST版本的,然后后续前端有空迁移到使用驼峰命名的方式,最终干掉那些奇怪的代码。

其实我提交代码就同时支持驼峰和下划线。我刚刚的提交顺带删除了 @JsonAlias,这样 Swagger 里面就只显示驼峰了,但实际依然保持了对下划线命名的支持,要移除下划线支持,只需要删除那三个手写的 setter 就行。

@Lixuhuilll
Copy link
Contributor Author

Lixuhuilll commented Aug 18, 2023

好了,这下缓存系统搞完收工。热度榜缓存24小时,最新榜缓存5分钟,浏览量榜缓存1小时,三个榜独立存储,调整缓存时间只需要修改Map中的键值对即可。

@hanyuwei70
Copy link
Contributor

修改作业的时候也需要 invalidate 缓存吧?

@Anselyuki
Copy link
Member

其实有打算把data-redis依赖换成Redisson的依赖,佬熟悉这个吗(),我还不是很熟悉

@Lixuhuilll
Copy link
Contributor Author

Lixuhuilll commented Aug 18, 2023

修改作业的时候也需要 invalidate 缓存吧?

修改作业后,短时间内访问量、热度等又不会发生变化,就没必要了。删除作业时清除缓存主要是防止出现玩家看得到却用不了的作业,刷新热度时清除则是因为这是每天仅有的热度更新时机。

@Lixuhuilll
Copy link
Contributor Author

其实有打算把data-redis依赖换成Redisson的依赖,佬熟悉这个吗(),我还不是很熟悉

我也不熟悉 Redisson,它相比基于 lettuce 的spring-boot-starter-data-redis有什么特殊之处吗?

@Anselyuki
Copy link
Member

个人的感觉:Redisson的封装更顶层,抽象程度更高一些,其他的特性咱们项目估计用不上

@Lixuhuilll
Copy link
Contributor Author

Lixuhuilll commented Aug 18, 2023

个人的感觉:Redisson的封装更顶层,抽象程度更高一些,其他的特性咱们项目估计用不上

看了一下文章的介绍,Redisson 封装了更多高级功能,很多东西可以开箱即用,而且对Redis集群的支持会好很多。不过现在项目中目前写好的RedisCache类基本够项目本身使用了,暂时没有必要切换 Redis 客户端。而且 Redisson 应该有 redisTemplate 的封装,如果以后有需要了,想引入应该不会和现有的使用 redisTemplate 的代码有什么大冲突。

@dragove dragove merged commit 12cc175 into MaaAssistantArknights:dev Aug 18, 2023
@Lixuhuilll Lixuhuilll deleted the add-query-cache branch August 18, 2023 13:50
@hanyuwei70
Copy link
Contributor

修改作业的时候也需要 invalidate 缓存吧?

修改作业后,短时间内访问量、热度等又不会发生变化,就没必要了。删除作业时清除缓存主要是防止出现玩家看得到却用不了的作业,刷新热度时清除则是因为这是每天仅有的热度更新时机。

访问量、热度无所谓,我担心的是作业说明这些不会被更新。

@LuoRenMu
Copy link
Member

修改作业的时候也需要 invalidate 缓存吧?

修改作业后,短时间内访问量、热度等又不会发生变化,就没必要了。删除作业时清除缓存主要是防止出现玩家看得到却用不了的作业,刷新热度时清除则是因为这是每天仅有的热度更新时机。

访问量、热度无所谓,我担心的是作业说明这些不会被更新。

只有分页查询的进行了缓存 作业详细都没有进行缓存 点开作业就是最新的数据

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants