redis 的 hash 中可以存储 hash 吗

来源:3-1 Redis基本数据类型

abulaka

2020-11-26

  1. 第一个问题

比如有如下数据

{
    user1: {
        name: zhangsan,
        age: 18
    },
    user2: {
        name: lisi,
        age: 20
    }
}

如果我通过以下方式存储的话,实际上是存储了 user:1user:2 两个 key

hset user:1 name zhangsan age 18
hset user:2 name lisi age 20

能不能只把 user 作为 key 存储,user:1user:2 作为内部的 key,这样,看上去数据库中的 key 就不是那么多了。

  1. 如果有下面这样的数据,redis 一般怎么存储
{
    "id": "0001",
    "name":"widget ABC",
    "model": "model123",
    "service":"standard",
    "admin_password": 82616416,
    "r1":
        {
            "extid":"50000",
            "password":"test123",
        },
    "r2":
        {
            "ext":"30000",
            "password":"test123",
        },
}
写回答

1回答

InCowboy

2020-11-26

第一个问题, 如果单独只把user作为key的话这样是不行的,如果这样保存你可以去试试,最终只有一条数据,因为value的hash结构会被后面的内容覆盖(你先写入一条:hset user userId 1,你如果在写入一条hset user userId 2那么userId2就会覆盖userId1的值),这个缓存你用考虑key有多少,数据量如果实在很大,我们后期可以采用分片进行存储的。

第二个问题:这样的JSON格式有两种存储方式,具体的使用要分场景,需要自己衡量一下,第一种就是string类型存储,这种就是序列化成json保存进去,另一种就是hash保存(里面r1和r2的值会以json字符串保存进去),如果只是一些不变的数据,而且字段就这些,保存到string也行,序列化和反序列化速度也能接受

2
0

高级Redis进阶课 解决Redis实际问题+掌握Redis6.x特性

以项目整合Redis各种场景,从此轻松应对各类Redis难题

934 学习 · 353 问题

查看课程