在redis中存储一个多属性对象使用String还是Hash?

探讨了在Redis中存储具有多属性的JSON对象时,使用String与Hash两种方式的优劣。String适用于频繁获取整个对象的情况,而Hash则适合于仅需访问对象部分属性的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考: https://stackoverflow.com/questions/16375188/redis-strings-vs-redis-hashes-to-represent-json-efficiency

现有一个有多属性的对象,如何在redis中存储比较合适?

例如:user : { id , name , sex , age , …}

取决于业务场景,在多数访问中是取该对象的所有属性还是只需要该对象的某些属性?

  1. 使用String :

    用 user + id 作为 key , 其他属性编码为JSON,作为value存储。例如:

    SET user:{id}  '{"name":"Fred","age":25}'
    

每次都能通过 id属性精准的找到对应user的所有属性

优点:通过id精确查找,速度很快,合适查找单个对象所有属性的业务情景。

缺点:若只访问单个属性,需解析JSON , 相比之下较慢 。

  1. 使用 Hash:

    使用 users 作为 key + id作为 key , 其他属性的key作为 field , 属性的值作为value ,建立一个hash 存储所有的user

    HMSET user:{id} name "Fred"
    HMSET user:{id} age 25
    

优点: 无需解析JSON字符串 ,适合每次查只需要user的单个属性。

缺点:查找多个属性时要多次查找,不合适。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值