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

参考: 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的单个属性。

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

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Java使用Redis存储hashhash的数据,可以通过使用RedisHash数据结构来实现。Hash数据结构可以存储键值对的集合,其每个键都是唯一的,并且与一个值相关联。 要在Redis存储hashhash的数据,可以按照以下步骤进行操作: 1. 导入Redis的Java客户端库,例如Jedis或Lettuce。 2. 创建Redis连接并获取Redis客户端实例。 3. 使用客户端实例选择要操作的数据库(如果需要)。 4. 使用`hmset`命令将外层hash的键值对存储Redis。该命令接受一个外层hash的键名和一个Map对象作为参数,其Map对象表示内层hash的键值对。 5. 遍历内层hash的键值对,使用`hmset`命令将每个内层hash存储Redis。内层hash的键名可以使用外层hash的键名加上一个特定的前缀来表示,以区分不同的内层hash。 6. 关闭Redis连接。 下面是一个示例代码,演示了如何在Java使用Jedis库将hashhash的数据存储Redis: ```java import redis.clients.jedis.Jedis; public class RedisHashNestedHashExample { public static void main(String[] args) { // 创建Redis连接 Jedis jedis = new Jedis("localhost"); // 选择数据库(可选) jedis.select(0); // 外层hash的键名 String outerHashKey = "outerHash"; // 内层hash的前缀 String innerHashPrefix = "innerHash:"; // 外层hash的键值对 jedis.hmset(outerHashKey, Map.of( "innerHash1", innerHashPrefix + "1", "innerHash2", innerHashPrefix + "2" )); // 内层hash的键值对 jedis.hmset(innerHashPrefix + "1", Map.of( "field1", "value1", "field2", "value2" )); jedis.hmset(innerHashPrefix + "2", Map.of( "field3", "value3", "field4", "value4" )); // 关闭Redis连接 jedis.close(); } } ``` 请注意,上述示例代码仅演示了如何将hashhash的数据存储Redis,如果需要查询或更新这些数据,可以使用Redis提供的相应命令进行操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值