我正在使用Jredis的同步实现,但是我计划切换到与Redis服务器通信的异步方法。

但是在此之前,我想询问社区是否实施Alphazero 杰里斯 是否足够稳定用于生产吗?

有没有人在使用它或有经验?

谢谢!

有帮助吗?

解决方案

当Jredis得到对交易语义的支持(Redis 1.3.n,Jredis Master Branch)时,当然应该足够“稳定”。

重新用于非交易命令的协议本身是原子,当发送破坏性命令时,并且在读取阶段时,连接故障允许无法恢复失败的窗口。客户无法知道Redis实际上是否处理了最后一个请求,但是由于网络故障而引起的响应被删除(例如)。甚至基本的请求/答复客户端也容易受到此影响(我认为这不仅限于Java,本身)。

由于REDIS的协议不需要任何元数据(根本不需要DML和DDL类型命令(例如没有命令序列号),因此打开了故障窗口。

使用管道,不再存在编写的命令与正在阅读的响应之间的顺序关联。 (该管道正在发送一个命令,该命令是n命令,导致Redis同时发布响应。

也就是说,管道中的每个未来对象都会被标记为错误,您将 知道 正是在哪个 回复 发生故障。

这是否有资格为“不稳定”?我认为,不。这是管道上的问题。

同样,使用交易语义的Redis 1.3.n完全解决了这个问题。

在该问题之外,有了异步(管道),您对确保您不会过分超负荷连接器承担了很大的责任。杰里斯管道在很大程度上可以保护您免受此功能(因为呼叫者的线程用于使网络写入,从而自然会抑制待处理响应队列上的输入负载)。

但是您仍然需要进行测试 - 您确实说了“生产”,对吗? ) - 并大小盒子,并在前端的加载线数量上盖上盖子。

我还可能建议不要在多核机上运行超过一台Jredis管道。在现有的实现(不块写缓冲区)中,有效率的空间(在完整的带宽利用率和最大化吞吐量的情况下)可以通过运行多个管道到同一服务器来获得。虽然一个管道忙于创建缓冲区以写作,而另一个是写作等。但是,由于它们的不可避免,这两个管道会互相干扰(不可避免 - 请记住它们是排队,必须发生某种形式的同步)并且定期缓存无效(在最坏的情况下,在每个dequeue/inqueue上 - 但是在道格·莱(Doug lea)中,我们相信。在新的系统中,宽的缓存无效周期是原始系统的一半,因此随着更多的缓存无效(平均而言)的数量两倍(平均而言)。因此,这是自我击败。但是,测试您的负载条件以及预计的生产部署平台。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top