在我當前的項目中,我將PostgreSQL作爲我的主DB,而Redis作爲一種從屬,例如,當某個用戶將另一個添加爲朋友時,首先將關係存儲在PostgreSQL中,然後Redis中的朋友列表將會被更新。當請求某個用戶的好友列表時,它將從Redis中取出,而不是從PostgreSQL中取出。我應該相信Redis的數據完整性嗎?
現在的問題是:當我更新Redis中的好友列表時,是否應該得到PostgreSQL的新副本,並用新副本替換Redis中的舊列表,或者是否應保留舊列表並僅將SADD用戶標識列表?後者當然最適合性能,但直觀上前者在保持數據完整性方面做得更好?如果使用像芹菜這樣的東西,第二種方法是否值得冒險?
+1 - 同意......並進一步指出/注意在這種情況下選擇使用redis作爲從服務器而不是主服務器對我來說似乎很奇怪。如果可伸縮性勝過這種情況下的一致性要求,爲什麼不使用redis作爲授權來源(如果單個服務器不處理負載,則設置垂直分片密鑰空間),然後複製到cassandra或其他水平可伸縮存儲中? – codemonkey
@Sripathi,我完全知道你提到的問題,不管我選擇什麼方法,數據損壞都會以相同的速度發生,但是這是發生腐敗的唯一地方嗎?由於Redis不符合ACID標準,我想知道應該多長時間從主服務器重新構建數據,還是將其視爲ACID(當然是在這個特定的預案中)是可行的? – Jiaji
@codemonkey事實上,我需要一致性,所以我選擇Postgres作爲master,因爲Redis數據可以從中重建,理論上發送給用戶的數據可以做成'幾乎'一致的。 – Jiaji