当前位置:  开发笔记 > 后端 > 正文

你如何*正确*从龙卷风查询Redis?

如何解决《你如何*正确*从龙卷风查询Redis?》经验,为你挑选了2个好方法。

我很好奇是什么建议的查询Redis(或任何数据库)的方法来自Tornado.

我见过一些像https://gist.github.com/357306这样的例子,但他们似乎都在使用阻塞调用redis.

我的理解是,为了避免让Tornado陷入停顿,我需要使用非阻塞的DB库,就像为Twisted开发的那样.

我错了吗?应该怎么做?



1> leporo..:

当涉及阻止BLPOP等命令或监听Pub/Sub通道时,您需要一个像tornado-redis这样的异步客户端.您可以从这个演示开始,了解龙卷风redis客户端如何用于开发简单的公共聊天应用程序.

但我建议在大多数其他情况下将同步redis-py客户端与hiredis结合使用.

异步客户端的主要优点是您的服务器可以在等待Redis服务器响应时处理传入请求.但是,Redis服务器速度非常快,在大多数情况下,在Tornado应用程序中设置异步回调的开销会增加请求处理的总时间,然后等待Redis服务器响应所花费的时间.

使用异步客户端可能会尝试同时向Redis服务器发送多个请求,但Redis服务器是单线程服务器(就像Tornado服务器一样),因此它将逐个回答这些请求,你几乎什么都得不到.事实上,只要有像MGET/MSET这样的管道和命令,您就不必同时向同一台Redis服务器发送多个Redis命令.

异步客户端,当您使用Redis的几个服务器实例的一些优势,但我建议使用同步(Redis的-PY)客户端,并像一个代理twemproxy或这一个(后者支持流水线和MGET/MSET命令).

另外,我建议在Tornado应用程序中使用redis-py客户端时不要使用连接池.只需Redis为应用程序连接的每个Redis数据库创建一个对象实例.


实际上,对于普通情况,使用同步客户端听起来不错,但最糟糕的情况可能是不可接受的!示例1:如果Redis挂起或网络到Redis很慢,您将挂起您的Tornado应用程序.示例2:在客户端上序列化请求并在服务器上进行序列化仅等效于网络延迟为0,这几乎不是这种情况.

2> Schildmeijer..:

我建议使用brukva,它是"在Tornado IO循环中工作的异步Redis客户端".


万一有人偶然发现这篇文章,我认为最新的异步redis库现在已经被撕裂了,请访问https://github.com/leporo/tornado-redis
推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有