redis:何时使用hash和rejson?

flseospp  于 2021-06-09  发布在  Redis
关注(0)|答案(1)|浏览(524)

我现在可以将redis中的资源存储为hash或rejson。在这个示例中,我的特殊数据是由几个字符串和数字字段组成的临时数据对象。用户将调用一个创建如下结构的进程:

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

这实际上是一个客户机用户处理的队列(队列由单独的redis流处理),其中每个对象将保持使用(作为散列或rejson对象)平均约1小时。在任何给定的时间,队列中都会有上万个这样的对象。在队列中,对象的字段(例如 user1_status 以及 user2_status )将更新多次。
处理完每个对象后,我可以将其留在redis中,也可以将每个对象移动到一个冷存储数据库中,以便保存日志并从redis中删除。我不确定我是该那样做还是就这样离开。
哪个redis数据类型(hash或rejson)更适合我的任务?在选择这两种类型时,有哪些一般考虑因素?
注意:我知道如果我想做这样的事情:

{
    '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
        }
    }
}

rejson可能是正确的选择,因为您必须在将任何对象存储为散列之前将其展平。为了这个问题,假设我不需要这么做,因为我已经知道了。

sc4hvdpw

sc4hvdpw1#

正如您已经提到的,平面对象和嵌套对象是使用json的一个主要原因。另一个原因是如果您关心特定于json的类型,比如数字和字符串,因为redis哈希值总是字符串。
最后,如果您需要根据特定的条件查询对象,那么redisjson支持jsonpath,这非常方便。
至于性能:虽然redisjson非常有效,但由于需要存储json键和序列化/反序列化,与普通redis哈希相比,它确实有一些开销。
总而言之:如果您的数据是结构化的或嵌套的,并且具有特定的模式,那么您可以很好地使用json。如果只是普通的键/值对,而不关心值的类型,那么普通的redis哈希就可以了。

相关问题