使用从redis队列使redis持久



也许我错过了什么,这似乎太简单了。是否有可能使redis持久有一个主redis节点复制数据到一个从redis节点?

我的情况我有一个REST端点,在收到客户端的请求后,将有效载荷粘在redis队列中,然后返回成功(HTTP 200)给客户端。如果这个队列在消息被处理之前,在fsync发生之前就关闭了,我就失去了有效负载,没有人知道它。

我想知道,如果我可以简单地写两个redis队列(在不同的区域)一个主一个从。当我写'主' redis将自动写入相同的元素在从队列,只有这样,终端返回一个HTTP 200到客户端。

这可能吗?Redis将(i)需要一种写从机的方法,(ii)有一个同步API或可等待API,只有在确认有效负载已经写到主和从机时才会返回。这里的关键是redis允许调用者知道从服务器已经接收到事件。

如果客户端没有收到HTTP 200,他们知道他们应该再次尝试发送它。感觉好像有什么我没注意到的。

感谢

这可能吗?

简短的回答。不,不可能。

Redis将(i)需要一种方法写从服务器

Redis可以复制数据到slave。然而,复制是异步的,这意味着它将在数据被写入slave之前返回响应给客户端。

(ii)有一个同步API或可等待API,它只会在确认有效负载已写入主服务器和从服务器时返回。

从Redis 3.0开始,它支持WAIT命令,该命令将阻塞客户端,直到该客户端的写操作被复制到给定数量的slave。

这可能会缓解问题,至少您可以确保写操作已被复制到多个节点。但是,您仍然可能丢失数据。因为从服务器也可能在将数据持久化到磁盘之前关闭。

相关内容

  • 没有找到相关文章

最新更新