redis hash 存每个用户个性化列表行吗?

2021-11-05 22:23:10 +08:00
 sytnishizuiai
目前优化一个接口,请假下:

现在项目,有个题目列表,每个题目会根据用户的身高体重年龄有不同文字介绍。
我现在是存 redis hash ,userid=>题目列表 json (加起来 200 字不到),用户登录直接用 userid 取。
用户用到才存入 hash ,30 天过期时间。

用户越多,hash 会越来越大,几十万后 redis 性能压力大吗?

优化的话,想拆分 hash ,一个 hash 存不同题目列表,一个 hash 存用户及上个 hash 关联 id ,这样可以省点空间。
或者不做缓存,其实也就 3 条 sql 。
1818 次点击
所在节点    Redis
9 条回复
0Vincent0Zhang0
2021-11-05 22:37:19 +08:00
存入 hash 就无法单用户过期了,过期就是整个 hash 过期的。
把 userid 作为 cache key 的一部分,当做 string value 来存取就可以了。
sytnishizuiai
2021-11-05 22:41:02 +08:00
@0Vincent0Zhang0 #1 我是想,存 hash 管理起来方便,不会上万或者几十万 key 分散。然后过期 15 或 30 天,即使不常登录的也会一个周期后过滤掉。
0Vincent0Zhang0
2021-11-05 22:48:10 +08:00
@sytnishizuiai 自己做定时任务扫描 hash 清理过期数据?还是对整个 hash 做固定时间过期,包括最近有登录的用户全部一起过期?
sytnishizuiai
2021-11-05 23:01:14 +08:00
@0Vincent0Zhang0 #3 目前是直接对 hash 做固定时间过期,虽然会把最近登录的用户一起清除了,我当时想一个 hash 管理起来方便,一个是重新存 hash 的时候,每个用户不同时间使用的时候才存,不会同时触发。
0Vincent0Zhang0
2021-11-05 23:12:28 +08:00
@sytnishizuiai 整个 hash 被删掉之后,数据库顶得住就没问题的。
alexzz117
2021-11-05 23:32:55 +08:00
直接用 userid 做 key 就行了,没不要 hash ,加个前缀做分类,与其他的 key 区分
sytnishizuiai
2021-11-05 23:55:00 +08:00
@0Vincent0Zhang0 #5 这还行,因为很普通的数据,而且项目原因 用户不是频繁登录的,目前就怕 hash 几十万个数据撑得住哇。

@alexzz117 #6 你跟楼上一样的想法,这样活跃用户可以缓存常驻,非活跃也不用考虑了,能区分开。
raysonlu
2021-11-06 09:43:08 +08:00
我上一个项目就是这么搞优化的
sytnishizuiai
2021-11-06 22:25:36 +08:00
@raysonlu #8 怎么搞的啊?请教下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/813391

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX