Redis Stream Xadd命令中是否必须“字段”?

时间:2020-01-15 08:47:50

标签: redis

根据Redis的文档here,XADD的格式如下:

XADD key ID field value [field value ...]

在我的用例中,字段的格式和编号是固定的。我想知道是否应该在命令中排除“ field”吗?

举个例子:

当前命令:

XADD stream * timestamp [ts_value] msg [msg_value] uid [uid_value] status [status_value]  

新命令

XADD stream * [ts_value] [msg_value] [uid_value] [status_value]

考虑到用例中固定的“字段”,如果我使用“新命令”,会是什么问题或不好的做法?

1 个答案:

答案 0 :(得分:4)

这可能有效,但对于任何在没有先验知识的情况下尝试理解数据的人来说都不是直观的-字段值的使用使数据解析更加容易。这不仅会使其他开发人员的体验更加困难,而且可能会与任何类型的第三方应用程序(例如Redis GUI)混淆。

此外,您的方法将要求始终具有偶数个固定数目的字段。

此外,将来对数据模型的任何更改(是的,没有任何“固定”的东西)会使维护工作陷入噩梦。您将不得不对行进行版本控制或迁移数据,或者谁知道什么。

因此,真正的问题是为什么任何人都不想使用字段名称。如果阅读文档,您会发现Redis重复使用它们会压缩名称,因此在空间方面几乎没有浪费。我能想到的唯一原因可能是优化流量,但除非是真正的问题,否则我不会去那里。

无论如何,如果您不愿意使用字段名,可以只使用一个,然后将所有“固定”值序列化为字段名。这将更像Redis,尽管一旦架构更改您仍然会遇到麻烦:

XADD stream * data "[ts_value],[msg_value],[uid_value],[status_value]"
相关问题