-
Notifications
You must be signed in to change notification settings - Fork 53
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
实现首页数据缓存以及入参 limit 限制为最大50 #122
Conversation
* 因为 Get 请求传入的参数不是 JSON,所以没办法使用 Jackson 的注解直接实现别名 | ||
* 添加 @JsonAlias 和 @JsonIgnore 注解只是为了保障 Swagger 的文档正确显示 | ||
* (吐槽一下,同样是Get请求,怎么CommentsQueries是驼峰命名,到了CopilotQueries就成了下划线命名) | ||
*/ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
因为后端是换语言重写开发的 评论区是现在java新开发的功能 其他则是继承之前C#的 (
/* | ||
* 删除作业时,删除首页的所有缓存,因为此时首页内容可能发生变化 | ||
* 新增作业就不必,因为新作业显然不会那么快就登上热度榜和浏览量榜 | ||
*/ | ||
redisCache.removeCacheByPattern("home:*"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
新作业不需要的话可以先加个简单的判断
缓存热度数据时将热度最小值同时放到缓存中,热度更新是一天一次的,且目前放在3点执行,很小概率会出现删除后由于缓存数据仍然驻留在页面上的情况
缓存浏览量数据时可以直接存入最小浏览量,这个数据比热度可靠
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
但是如果缓存时间够长,期间就可能出现用户看得到热度榜上的作业,但作业实际被作者删除了的情况,显然会给用户带来困扰。目前新的逻辑通过Redis的Set集合记录被缓存的作业ID,当删除的作业处于缓存中时,清空对应的缓存。
好耶,关于下划线的问题我想的是可以先建一个POST版本的,然后后续前端有空迁移到使用驼峰命名的方式,最终干掉那些奇怪的代码。 |
又优化了一下缓存逻辑 |
其实我提交代码就同时支持驼峰和下划线。我刚刚的提交顺带删除了 @JsonAlias,这样 Swagger 里面就只显示驼峰了,但实际依然保持了对下划线命名的支持,要移除下划线支持,只需要删除那三个手写的 setter 就行。 |
好了,这下缓存系统搞完收工。热度榜缓存24小时,最新榜缓存5分钟,浏览量榜缓存1小时,三个榜独立存储,调整缓存时间只需要修改Map中的键值对即可。 |
修改作业的时候也需要 invalidate 缓存吧? |
其实有打算把data-redis依赖换成Redisson的依赖,佬熟悉这个吗(),我还不是很熟悉 |
修改作业后,短时间内访问量、热度等又不会发生变化,就没必要了。删除作业时清除缓存主要是防止出现玩家看得到却用不了的作业,刷新热度时清除则是因为这是每天仅有的热度更新时机。 |
我也不熟悉 Redisson,它相比基于 lettuce 的spring-boot-starter-data-redis有什么特殊之处吗? |
个人的感觉:Redisson的封装更顶层,抽象程度更高一些,其他的特性咱们项目估计用不上 |
看了一下文章的介绍,Redisson 封装了更多高级功能,很多东西可以开箱即用,而且对Redis集群的支持会好很多。不过现在项目中目前写好的RedisCache类基本够项目本身使用了,暂时没有必要切换 Redis 客户端。而且 Redisson 应该有 redisTemplate 的封装,如果以后有需要了,想引入应该不会和现有的使用 redisTemplate 的代码有什么大冲突。 |
访问量、热度无所谓,我担心的是作业说明这些不会被更新。 |
只有分页查询的进行了缓存 作业详细都没有进行缓存 点开作业就是最新的数据 |
"/copilot/query"接口添加首页数据缓存
"/copilot/query"接口和"/comments/query"接口入参 limit 限制为最多 50
实现了Issue #121 的前两项功能