在我目前的项目中,我将PostgreSQL作为我的主数据库,Redis作为一种奴隶,例如,当某个用户将另一个用户添加为朋友时,首先将关系存储在PostgreSQL中,然后更新Redis中的朋友列表.当请求某个用户
问题是:当我更新Redis中的好友列表时,我应该从PostgreSQL中获取一份新的副本,并用新的列表替换Redis中的旧列表,还是应该保留旧列表,只需将用户ID SADD到列表中?后者当然最适合性能,但直观地说前者在保持数据完整性方面做得更好?如果使用像Celery这样的东西,第二种方法是否值得冒险?
这与Redis无关.当您写入两个数据库时,即使两个数据库都保证数据完整性,也会出现很多问题.为了便于讨论,在您的问题中将Redis替换为MySQL,并问自己 – 数据完整性会受到损害吗?
您可能已经写过Postgres,然后您的进程可能会死而无需写入MySQL.或者可能是网络中断.或者MySQL可能已关闭.在所有这些情况下,Postgres和MySQL将开始有所不同.
无论是替换整个记录还是简单地添加一行都无关紧要.两者都可能导致数据损坏.
如果您关注数据完整性,请将数据保存在单个权威系统中.否则,你需要一个two phase commit protocol