Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在twisted服务器中与redis或memcache建立持久连接_Python_Redis_Memcached_Twisted - Fatal编程技术网

Python 如何在twisted服务器中与redis或memcache建立持久连接

Python 如何在twisted服务器中与redis或memcache建立持久连接,python,redis,memcached,twisted,Python,Redis,Memcached,Twisted,我试图学习和理解如何工作,为此我创建了一个基本的echo服务器,该服务器将输入作为存储在服务器上的数据的键,如果输入与数据库上的键匹配,它将打印出值,否则打印“找不到键” 我正在避免使用@defer.inlineCallbacks只是为了练习更多如何使用,代码是: 来自twisted.internet的,协议 从txredis.client导入RedisClient REDIS_HOST='localhost' REDIS_端口=6379 类Echo(protocol.protocol): de

我试图学习和理解如何工作,为此我创建了一个基本的echo服务器,该服务器将输入作为存储在服务器上的数据的键,如果输入与数据库上的键匹配,它将打印出值,否则打印“找不到键”

我正在避免使用
@defer.inlineCallbacks
只是为了练习更多如何使用,代码是:

来自twisted.internet的
,协议
从txredis.client导入RedisClient
REDIS_HOST='localhost'
REDIS_端口=6379
类Echo(protocol.protocol):
def connectionMade(自):
self.factory.count+=1
self.transport.write('有%d个客户端\n'%self.factory.count〕)
接收到def数据(自身、数据):
clientCreator=protocol.clientCreator(reactor,RedisClient)
d=clientCreator.connectTCP(REDIS\u主机、REDIS\u端口)
def cb_redis_get(r,数据):
d=r.get(data.strip())
def cb_结果(x):
如果x:
self.transport.write(“%s\n”%x)
其他:
self.transport.write('找不到密钥\n')
d、 添加两个(cb_结果)
d、 addCallback(cb_redis_get,数据)
类EchoFactory(protocol.ServerFactory):
计数=0
协议=回声
def main():
reactor.listenTCP(1234,EchoFactory())
反应堆运行()
如果名称=“\uuuuu main\uuuuuuuu”:
main()
当一个客户端连接到telnet 0 1234并输入一个字时,就会连接到redis服务器。通过这种方法,如果我有100个并发客户端,代码将创建100个到redis或memcache服务器的连接

这可能是预期的行为,但我想知道,是否可以利用twisted reactor,并且在启动服务器时,创建一个持久连接并将其用于所有新连接,这样我就可以为每个实例创建一个连接并重新使用它

如果可能的话,您知道如何正确地实现它,以及如何处理重新连接吗?

请查看该库。它是redis的单个连接和连接池(持久和非持久)的完全扭曲实现

我已经为一个twisted项目使用了几个月了,我对它非常满意


等等,好吧,也许我没听清你想问什么

当我看你的代码时,我看到了一些奇怪的事情,比如你在从telnet接收数据时生成了一个到redis的连接,这不仅会为每个telnet创建一个连接,还会为该telnet连接上的每个数据刷新创建一个连接(这几乎肯定不是你想要它做的)

看一看这些示例,它们比我在txredis中看到的示例更详细

大致说来,需要将您的逻辑分为两部分,一部分应该让redis连接处于活动状态,另一部分(基本上就是您现在拥有的)应该处理telnet连接并通过redis连接推送命令。txredisapi库将为您完成所有的redis工作(…而且txRedis也可能,我不太了解这个库,txredisapi示例应该对您有所帮助)


(这类问题在过去几天里出现了很多,您可能会发现以前的答案有助于理解twisted中部件之间的常见分离,请参见:)

谢谢,我只是切换到txredisapi并使用了
lazyConnection()