我现在可以将资源以、散列、或RedisJSON的形式存储在Redis中。我在这个实例中的特定数据是由多个字符串和数字字段组成的临时数据对象。用户将调用创建如下结构的进程:
{
'item_id': 'k0f8h3n5m6n1w9d0k0k1m1n4b6c8f8r7'
'amount': 3.00042
'timestamp': 1590440708,
'user1_status': 'pending',
'user_2_status': 'completed'
}这实际上是一个客户端用户处理的队列(队列由一个单独的Redis流处理),其中每个对象将保留使用(作为散列或RedisJSON对象)平均约1小时。在任何时候,队列中都会有成千上万个这样的对象。在队列中,对象的字段(如user1_status和user2_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可能是正确的选择,因为您必须在将任何对象存储为散列之前将其扁平化。为了这个问题,假设我不需要这样做,因为我已经知道了。
发布于 2020-05-26 09:57:20
正如您已经提到的,平面对象和嵌套对象是使用RedisJSON的主要原因之一。另一个原因是如果您关心特定于JSON的类型,例如数字与字符串,因为Redis哈希值总是字符串。
最后,如果您需要根据特定的条件查询对象,RedisJSON支持JSONPath,因为它非常方便。
至于性能:虽然RedisJSON非常高效,但由于需要存储JSON键和序列化/反序列化,它确实比普通的Redis散列有一些开销。
总之:如果您的数据是结构化的或嵌套的,并且有一个特定的模式,那么您可以很好地利用RedisJSON。如果它只是简单的键/值对,而您并不关心这些值的类型,那么普通的Redis散列就可以了。
https://stackoverflow.com/questions/62010968
复制相似问题