json - Redis:何时使用哈希与 RedisJSON?

标签 json redis hashmap redisjson

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

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

这实际上是一个客户端用户处理的队列(队列由单独的 Redis stream 处理),其中每个 object 将继续使用(作为哈希或 RedisJSON对象)平均约 1 小时。在任何给定时间,队列中都会有成千上万个这样的对象。在队列中,对象的字段(如 user1_statususer2_status)将被更新多次。

一旦每个 object 处理完毕,我可以将其留在 Redis 中,也可以将每个 object 移动到冷存储数据库中以保存日志并从 Redis 中删除。我不确定我应该这样做还是直接离开。

哪种 Redis 数据类型(Hash 或 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 可能是正确的选择,因为您必须先展平任何对象,然后才能将其存储为哈希。为了这个问题,假设我不需要这样做,因为我已经知道了。

最佳答案

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

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

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

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

关于json - Redis:何时使用哈希与 RedisJSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62010968/

相关文章:

java - 获取特定的HashMap实体并获取详细信息

c# - 将字符串映射到整数的哈希

php - 如何将 DOM 对象作为 JSON 对象发送

c# - 将 ModelState 转换为 JSON 以进行日志记录

arrays - node.js 流数组的 json 响应

node.js redis smembers 同步

java - 从具有多个值的 Hashmap 中获取其中一个值

javascript - 如何使用成品排序功能

php - 使用 Homestead 在 Laravel 中使用 Redis 队列

python - 最大内存 redis heroku django