簡體   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