一般来说,将应用程序日志存储在 redis 中是个坏主意。Redis 是一种内存数据存储,您通常不需要将日志存储在内存中。
通常的方法是将日志存储在附加到 ec2 实例的临时磁盘上。这与 EBS 不同,并且更可靠。然后,您可以有一个 cron 作业来定期将日志复制到 S3。这是最常见的方法。
使用上述方法,您可能会丢失一些日志条目。对于大多数应用程序,这种风险是可以接受的。
如果该风险不适用,我建议存储到不在 EC2 实例上的持久存储中。关系数据库是一个好的开始。
Redis 对日志没有意义,除非你在做一些实时分析。如果您可以解释您的用例,我们可以推荐它是否合适。
编辑
1)你要我做一个权衡。选择 Ethermal 以获得价格/性能,如果您不想丢失日志,请选择附加 EBS。我不能同时拥有由基于后台磁盘的存储(在本例中为 S3)支持的 Redis 集群吗?
简短的回答是否定的。elasticcache 上的 redis 实例也具有相同的可用原语 - 临时磁盘和 EBS。如果您关心一致性,那么您必须这样做fsync always,在这种情况下,Redis 必须在每次写入时都写入磁盘。您只是将磁盘写入从 Web 服务器推送到 Redis。
如果您不总是 fsync 或每 2 秒 fsync 一次(这是默认设置) - 您仍然会丢失几秒钟的数据。
但这都是理论。您应该评估您的用例并做出明确的权衡。
2)我希望从尝试过 Redis 解决方案的人那里得到答案,以了解理论与现实世界实践之间的差距。比如redis开始swap的时候会发生什么(喘气)
同样,我认为没有人将一般的 application/node.js 日志写入 Redis。您必须针对您的用例进行尝试,看看它是否适合您。
3)如果我要选择基于快速磁盘(仅附加)的日志存储,我可能会首先考虑 Kafka 或 Cassandra
同意您。Redis 似乎不太适合您的用例,至少从我的理解来看是这样。