V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sytnishizuiai
V2EX  ›  Redis

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

  •  
  •   sytnishizuiai · 2021-11-05 22:23:10 +08:00 · 1982 次点击
    这是一个创建于 1106 天前的主题,其中的信息可能已经有所发展或是发生改变。
    目前优化一个接口,请假下:

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

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

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

    @alexzz117 #6 你跟楼上一样的想法,这样活跃用户可以缓存常驻,非活跃也不用考虑了,能区分开。
    raysonlu
        8
    raysonlu  
       2021-11-06 09:43:08 +08:00
    我上一个项目就是这么搞优化的
    sytnishizuiai
        9
    sytnishizuiai  
    OP
       2021-11-06 22:25:36 +08:00
    @raysonlu #8 怎么搞的啊?请教下
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2230 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 00:45 · PVG 08:45 · LAX 16:45 · JFK 19:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.