通常,将应用程序日志存储在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