akka持久性是否比我在redis中存储消息状态更好?

akka持久性是否比我在redis中存储消息状态更好?,akka,akka-persistence,Akka,Akka Persistence,我现在喜欢在akka中使用redis,因为我可以通过查询redis来监控处理了哪些消息。Redis还可以持久保存到磁盘 akka持久性与仅使用redis相比如何?我想说,两种选择都不比另一种好,尽管它们提供了不同的功能。Akka持久性是关于持久化参与者处理的每个事件,以便可以重播这些事件来重建参与者的状态。它是事件源的一个实现。您还可以出于其他目的查询存储的事件,例如分析系统的行为。由于记录了每个历史事件,因此可以详细分析 另一种持久性机制可能只包含系统的当前状态,因此不可能对历史进行分析 引用

我现在喜欢在akka中使用redis,因为我可以通过查询redis来监控处理了哪些消息。Redis还可以持久保存到磁盘


akka持久性与仅使用redis相比如何?

我想说,两种选择都不比另一种好,尽管它们提供了不同的功能。Akka持久性是关于持久化参与者处理的每个事件,以便可以重播这些事件来重建参与者的状态。它是事件源的一个实现。您还可以出于其他目的查询存储的事件,例如分析系统的行为。由于记录了每个历史事件,因此可以详细分析

另一种持久性机制可能只包含系统的当前状态,因此不可能对历史进行分析

引用马丁·福勒(Martin Fowler)的文章,事件来源可能不适合所有应用:

将应用程序的每个更改打包为一个事件是一个非常重要的过程 不是每个人都喜欢的界面风格,很多人发现 很尴尬。因此,使用它不是一种自然的选择 意味着你希望得到某种形式的回报

通过直接使用Redis(或任何其他数据库),您可以更全面地控制持久化方法。使用Akka持久性,您需要使用它的做事方式,但是一些细节是从您那里抽象出来的。在某种程度上,这是灵活性(编写自己的持久性层,例如使用Redis)与易用性(使用Akka持久性库)之间的权衡

Akka持久性是可插拔的,就用于持久性的系统而言。许多存储系统都有插件,包括Redis:

因此,Akka持久性的一个优点是,您可以更改持久性层(例如,在测试和生产之间,或者在应用程序需要随时间变化时从RDBMS更改为NoSQL),而无需更改应用程序代码