Redis:什么时候使用哈希与RedisJSON?



我可以将Redis中的资源存储为hashRedisJSON。在此实例中,我的特定数据是临时数据对象,每个对象由多个字符串和数字字段组成。用户将调用一个进程,该进程创建一个结构,如下所示:

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

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

处理完每个对象后,我可以将其保留在 Redis 中,也可以将每个对象移动到冷存储数据库以进行日志保存并从 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 哈希就可以了。

最新更新