通常,將應用程序日誌存儲在redis中是一個壞主意。 Redis是內存數據存儲,您通常不需要將日誌記錄到內存中。
通常的方法是將日誌存儲在附加到ec2實例的臨時磁盤上。這與EBS不同,而且更可靠。然後您可以有一個cron作業來定期將日誌複製到S3。這是最常見的方法。
通過上述方法,您可能會失去一些日誌條目。對於大多數應用來說,這個風險是可以接受
如果這種風險不適用,我建議存儲到不在EC2實例上的持久性存儲。關係數據庫是一個好的開始。
除非您正在做一些實時分析,否則Redis對日誌沒有意義。如果你能解釋你的用例,我們可以推薦它是否合適。
編輯
1)你問我做一個權衡。如果您不想丟失日誌,請選擇Ephermal性價比,並選擇附加的EBS。我不能同時擁有由基於背景磁盤的存儲支持的Redis羣集(在本例中爲S3)?
簡短的回答是否定的。 elasticcache上的redis實例也具有相同的可用基元 - 短暫磁盤和EBS。如果您關心一致性,那麼您必須登錄fsync always
,在這種情況下,Redis必須在每次寫入時寫入磁盤。您只是將Web服務器上的磁盤寫入到Redis中。
如果您不是fsync always或fsync每2s(這是默認值) - 您仍然會丟失秒數的數據。
但這就是全部理論。你應該評估你的用例並做出明確的折衷。
2)我希望得到從別人的答案是嘗試提出解決的Redis,學習理論和現實世界的實踐之間的差距。例如,當Redis的開始交換(GASP)
同樣,我不認爲任何人寫一般應用/ Node.js的登錄到Redis的會發生什麼。你必須爲你的用例嘗試一下,看看它是否適合你。
3)如果我要選擇基於一個快速的磁盤(僅追加)日誌存儲,我可能會考慮卡夫卡或卡桑德拉第一
同意你的看法。 Redis似乎不適合您的用例,至少從我的理解來看。
1.你在問我做一個權衡。如果您不想丟失日誌,請選擇Ephermal性價比,並選擇附加的EBS。我不能同時擁有由基於背景磁盤的存儲支持的Redis羣集(在本例中爲S3)? 2.我曾希望從嘗試Redis解決方案的人那裏得到答案,以瞭解理論與現實世界實踐之間的差距。例如,當redis開始交換時會發生什麼(gasp) 3.如果我選擇一個基於快速磁盤(僅附加)的日誌存儲,我可能首先考慮Kafka或Cassandra。 – itaifrenkel