我应该相信Redis的数据完整性吗?

Jia*_*aji 5 performance data-integrity redis

在我目前的项目中,我将PostgreSQL作为我的主数据库,Redis作为一种奴隶,例如,当某个用户将另一个用户添加为朋友时,首先将关系存储在PostgreSQL中,然后更新Redis中的朋友列表.当请求某个用户的好友列表时,它将被拉出Redis而不是PostgreSQL.

问题是:当我更新Redis中的好友列表时,我应该从PostgreSQL中获取一份新的副本,并用新的列表替换Redis中的旧列表,还是应该保留旧列表,只需将用户ID SADD到列表中?后者当然最适合性能,但直观地说前者在保持数据完整性方面做得更好?如果使用像Celery这样的东西,第二种方法是否值得冒险?

Sri*_*nan 4

这与Redis无关。当您写入两个数据库时,即使两个数据库都单独保证数据完整性,很多事情也可能会出错。

为了方便讨论,将您问题中的 Redis 替换为 MySQL,并问问自己 - 数据完整性会受到损害吗?

您可能已写入 Postgres,然后您的进程可能会在不写入 MySQL 的情况下终止。或者可能是网络中断。或者MySQL 可能已关闭。在所有这些情况下,Postgres 和 MySQL 都会开始有所不同。

无论您替换整个记录还是仅添加一行都没有关系。两者都可能导致数据损坏。

如果您关心数据完整性,请将数据保存在单一权威系统中。否则,您将需要两阶段提交协议