V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
guyeuro
V2EX  ›  问与答

一个 redis 设计问题

  •  
  •   guyeuro · 2017-07-26 17:48:59 +08:00 · 1528 次点击
    这是一个创建于 2703 天前的主题,其中的信息可能已经有所发展或是发生改变。

    假设有一个图片被访问到,要求用户 3 天内都不能再访问

    我在 redis 设计如下,设计为 string:

    key 为

    pic_access:user_id:1000:pic_id:3d4fa211

    value 为空字符串 ""

    然后设置这个 key 的生命周期为 3 天

    然后只要检查 key 是否存在即可判定

    这种方式的话,我觉得 key 格式好像不太好?冒号太多了。。。

    然后 redis 里会有很多 key

    另一种则是设计为 hash

    key 为 pic_access:user_id:1000

    value 则为 {pic_id:3d4fa211, 2017-7-26 15:32:12}

    这种方式 key 的数目少不少

    但是时间判定稍微都一点点麻烦

    哪种更好?

    5 条回复    2017-07-27 09:15:44 +08:00
    lianxiaoyi
        1
    lianxiaoyi  
       2017-07-26 18:00:09 +08:00   ❤️ 1
    我个人会选第一种,简单粗暴,不怕 key 多。。因为我有集群将 key 打散到很多 redis 服务中......
    当你用 hash 结构之后,你一个 key 的 value 值多了之后,怎么做过期处理你得考虑好。。。要做过期用户来访问这个 value 还好,可以做时间判断,但用户如果不再访问这个 value,那你只能自己写扫描,不觉得很累么????
    guyeuro
        2
    guyeuro  
    OP
       2017-07-26 23:15:38 +08:00 via iPhone
    @lianxiaoyi 哎,就你一个回复
    jadecoder
        3
    jadecoder  
       2017-07-26 23:51:54 +08:00
    Redis 的 key 不怕多,也不怕长
    bazingaterry
        4
    bazingaterry  
       2017-07-27 01:57:18 +08:00 via iPhone
    我也选第一个,比较简单。

    粗略看过「 Redis 设计与实现」,哈希表作为很常用的一个数据结构,Redis 的设计也是挺高效,不用怕 key 太多,它会自己扩容然后 rehash。
    lianxiaoyi
        5
    lianxiaoyi  
       2017-07-27 09:15:44 +08:00
    @guyeuro 那赶紧感谢我啊 。。。。啊哈哈
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3201 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 12:19 · PVG 20:19 · LAX 04:19 · JFK 07:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.