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

redis 存储用户信息哪种方式比较好呢?

  •  
  •   mentalidade · 2018-04-28 10:15:56 +08:00 · 7527 次点击
    这是一个创建于 2403 天前的主题,其中的信息可能已经有所发展或是发生改变。

    存储 key-value 对, 1.唯一的 id 作为 key,value 里面存储一个 json:{"user_name":"aaa","user_phone","11111111","user_img":"http://asdas"},这种方式,还是

    2.id+user_name为 key,value 存储对应的值。

    那种方式好呢?

    22 条回复    2018-04-28 16:45:54 +08:00
    victorzheng
        1
    victorzheng  
       2018-04-28 10:22:07 +08:00
    目的是做缓存,还是就是把 redis 做存储呢?
    1、做缓存的话,直接 string 类型,key-value 就行了
    2、做存储的话,可以用 hash,string 都可以,但是注意并发修改是会覆盖的
    mentalidade
        2
    mentalidade  
    OP
       2018-04-28 10:34:16 +08:00
    @victorzheng #1 做缓存的,直接一个 id 为 key 的话,用户的整体信息作为 value,感觉这个 value 就有点打
    nullcc
        3
    nullcc  
       2018-04-28 10:35:24 +08:00
    看你查询时的场景,如果都能用 unique id 就不需要加上 user_name 了
    nullcc
        4
    nullcc  
       2018-04-28 10:36:56 +08:00
    可以考虑筛选一些必要的 user attr 放进去,不一定要全部扔进去
    owenliang
        5
    owenliang  
       2018-04-28 10:50:35 +08:00
    应该是 hash 结构吧。
    mentalidade
        6
    mentalidade  
    OP
       2018-04-28 10:51:22 +08:00
    @nullcc #4 明白。谢谢
    mentalidade
        7
    mentalidade  
    OP
       2018-04-28 10:52:13 +08:00
    @owenliang #5 redis 是二级缓存,还有一层缓存,结构只能 key-value 对
    owenliang
        8
    owenliang  
       2018-04-28 11:10:01 +08:00
    @mentalidade what ?我只是说 value 部分应该用 hash。
    liyaojian
        9
    liyaojian  
       2018-04-28 11:35:29 +08:00   ❤️ 3
    阿里云 redis 开发规范 可以了解下 https://yq.aliyun.com/articles/531067
    flyingghost
        10
    flyingghost  
       2018-04-28 12:01:52 +08:00
    说实话很多业务场景入参可能只有 userid 吧。。。要想知道 username 还得特意去查一下。
    alexnevsky
        11
    alexnevsky  
       2018-04-28 12:14:37 +08:00
    用 string 不觉得浪费吗? hash 更合适吧
    alexnevsky
        12
    alexnevsky  
       2018-04-28 12:16:45 +08:00
    id 唯一就只用 id,
    netlxl
        14
    netlxl  
       2018-04-28 13:04:43 +08:00 via Android
    存储等量信息,你的两种方式,存储空间第二种之多不少,key 更占空间。用什么做 key,取决于你的程序需要什么。第二种方式在只有 id 的时候是拿不到缓存的。
    netlxl
        15
    netlxl  
       2018-04-28 13:09:21 +08:00 via Android
    @alexnevsky 如果只是 key-对象的存储,hash 不合适,string 也没浪费多少。拿 redis 做内存数据库的时候,hash 才有用。
    ms2008
        16
    ms2008  
       2018-04-28 13:13:30 +08:00
    hash 妥妥的,怼一个 json 进去既浪费内存,又浪费 CPU
    loveCoding
        17
    loveCoding  
       2018-04-28 13:30:58 +08:00
    hash
    ilyh
        18
    ilyh  
       2018-04-28 14:07:08 +08:00
    string, hash 没法批量操作啊
    mentalidade
        19
    mentalidade  
    OP
       2018-04-28 14:12:04 +08:00
    @ms2008 #16 哈希的话就没法在 ngx.share.DICT 里面再缓存一层了
    RorschachZZZ
        20
    RorschachZZZ  
       2018-04-28 14:28:40 +08:00
    hash 爆内存是最不能接受的。
    lovedebug
        21
    lovedebug  
       2018-04-28 14:36:17 +08:00   ❤️ 1
    尽量保持原始数据格式,不要随便为原始数据加格式。
    否则后面由新需求或者修改数据会非常麻烦,migration 更痛苦
    onedayonecode
        22
    onedayonecode  
       2018-04-28 16:45:54 +08:00
    hash 可以直接存数组,不用转
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3208 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 13:34 · PVG 21:34 · LAX 05:34 · JFK 08:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.