1
GooMS 2023-12-15 02:09:19 +08:00 via Android
在 模型上实现 热度属性从 redis 取
|
2
Giftina 2023-12-15 09:49:11 +08:00
你的方案可行,线上产品有应用这样的做法
|
3
doubleTrees OP @Giftina 但是这样的话在刷的时候需要把 mysql 所有的贴子的热度都更新,数据量很大,且只能一个一个更新。或者维护一个热度变更了的贴子列表,只更新这些贴子,但这样仍然有很多帖子。在数据量到百万千万级这个更新就很耗时了。
|
4
doubleTrees OP @GooMS 请问这样的话带热度的多字段排序和筛选怎么做呢,比如说根据标签和热度进行筛选和排序
|
5
123123123sdf 2023-12-15 10:55:30 +08:00
@doubleTrees 热点帖子的热度更新频率较快,而普通帖子更新的频率低一点,这样设计可以吗?
|
6
GooMS 2023-12-15 10:59:34 +08:00
@doubleTrees 你需要什么筛选呢?如果是固定的几个可以为每个条件都创建集合,如果是动态且有时效性的我觉得你得考虑 Redis Stack 之类的东西
|
7
TiaoYeTaiLang 2023-12-15 11:56:31 +08:00
直写 redis ,异步刷到 mysql 不就好了吗?
|
8
doubleTrees OP @GooMS 指的是 redisearch 吗,我去了解了一下,感觉是可以的,但是迁移成本比较大,相当于加个数据库了。
|
9
doubleTrees OP @TiaoYeTaiLang 刷的话会把全部帖子的热度都刷一遍,会造成堵塞吧
|
10
ji76289 2023-12-15 14:30:13 +08:00
所有查询请求都到 redis ,别去 mysql 。
|
11
veni2023 2023-12-15 15:57:27 +08:00
单独维护一个各筛选条件下热度前 xx 的帖子表?这样要实时更新热度的帖子数会少很多
|
12
evalcony 2023-12-15 16:40:11 +08:00
1. 各种计算用的属性,存 redis 。更新也都是直接对 redis 更新。
2. 热度的计算,并不需要每次的数值变更都进行计算。它可以是按一定时间间隔去计算。比如秒。 3. 排序筛选的需求直接读 redis 相关属性,在内存里做。可以维护一个接口或服务单独做排序,对外提供结果。不用每个请求都去做热度计算等工作。 |