我正在开始一个新项目。在这个项目中,我将使用 Redis 来存储一些必须持久的数据。对于这些数据,我将使用Append Only File (AOF)
持久性。
项目中有 2 个应用程序必须相互通信。为了允许这种通信,我正在考虑使用 Redis 作为“共享内存”。对于“共享内存”这个术语,我的意思是 Redis 的使用是:
- 存储一些将由应用程序 A 更新的密钥(称为
keyA1
, )keyA2
- 存储应用程序 B 更新的其他密钥(称为
keyB1
,keyB2
) - 应用程序 A 读取应用程序 B 更新的密钥 (
keyB1
,keyB2
) - 应用程序 B 读取应用程序 A 更新的密钥 (
keyA1
,keyA2
)
这组键 ( keyA1
、keyA2
、keyB1
、keyB2
) 不得保存在持久内存中。
我的想法是使用 Redis 来避免在应用程序 A 和应用程序 B 之间创建 TCP 通信协议(但我怀疑这样使用 Redis 是不正确的)。这两个应用程序中的每一个都通过写入和读取 Redis 数据库的键
来向对方发送消息并从对方接收消息。
这篇文章告诉我们,不可能只为数据库键的子集激活持久性,因此我正在考虑使用 2 个 Redis 实例。
使用 2 个 Redis 服务器实例(一个在默认端口 6379 上,另一个在端口 6380 上)并设置第一个具有 AOF 持久性而第二个不具有持久性是否正确?
有更好的方法吗?
谢谢
现在我可以回答我的问题了。我和我的同事已经实现了应用程序 A 和应用程序 B 的代码,它们使用 Redis 实例(在端口 6380 上),但没有持久性进行通信,如问题中所述。
为了配置此 Redis 实例,我们创建了配置文件
/etc/redis/redis_6380.conf
。该文件最重要的选项是:此外,我们还使用了另一个具有 AOF 持久性的 Redis 实例(默认端口 6379)来将数据存储在持久内存上。我们使用标准文件
/etc/redis/redis.conf
来配置第二个 Redis 实例。该架构可以正确满足我们的需求。特别是,应用程序 A 和应用程序 B 可以通过写入/读取存储在端口 6380 上的 Redis 实例中的一些密钥(参见问题)进行通信。在我们的上下文中,这些密钥每秒最多被修改 2 或 3 次,并且这个频率, 足够了。
我分享此信息,以便其他人可以决定以这种方式使用 Redis。