繁体   English   中英

Redis:何时使用哈希与 RedisJSON?

[英]Redis: When to use hashes vs RedisJSON?

我可以在 Redis 中将资源存储为hashRedisJSON 在这种情况下,我的特定数据是由多个字符串和数字字段组成的临时数据对象 用户将调用一个创建如下结构的进程:

{
    'item_id': 'k0f8h3n5m6n1w9d0k0k1m1n4b6c8f8r7'
    'amount': 3.00042
    'timestamp': 1590440708,
    'user1_status': 'pending',
    'user_2_status': 'completed'
}

This is effectively a client-user-processed queue (The queuing is handled by a separate Redis stream ) wherein each object will remain used (As a hash or RedisJSON object) for an average of about 1 hour. 在任何给定时间,队列中都会有数万个这样的对象 在队列中,对象的字段(例如user1_statususer2_status )将被更新几次。

Once each object is done being processed, I could either leave it in Redis or move each object to a cold storage database for log-keeping and delete from Redis. 我不确定我是应该这样做还是离开它。

哪种 Redis 数据类型(哈希或 RedisJSON)更适合我的任务? 在这两种类型之间做出决定时有哪些一般考虑因素?

注意:我意识到如果我想做这样的事情:

{
    'item_id': 'k0f8h3n5m6n1w9d0k0k1m1n4b6c8f8r7'
    'amount': 3.00042
    'timestamp': 1590440708,
    'user1_status': 'pending',
    'user_2_status': 'completed'
    'parent': {
        'item1': 1,
        'item2': [1, 2, 3, 4]
        'item3': {
            'one': 1,
            'two': 2
        }
    }
}

RedisJSON 可能是正确的选择,因为您必须先展平任何 object,然后才能将其存储为 hash。 为了这个问题,假设我不需要这样做,因为我已经知道了。

正如您已经提到的,平面对象与嵌套对象是使用 RedisJSON 的主要原因之一。 另一个原因是如果您关心 JSON 特定的类型,例如数字与字符串,因为 Redis hash 值始终是字符串。

最后,如果您需要根据特定条件查询对象,RedisJSON 支持 JSONPath,这很方便。

至于性能:虽然 RedisJSON 非常高效,但与普通的 Redis 哈希相比,它确实有一些开销,因为需要存储 JSON 密钥和序列化/反序列化。

总结:如果你的数据是结构化的或嵌套的并且有特定的模式,你可以很好地利用 RedisJSON。 如果它只是简单的键/值对并且您不关心值的类型,那么简单的 Redis 哈希就可以了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM