首页 文章

完成几乎所有任务后,Redis数据库会出现“连接被拒绝”错误

提问于
浏览
1

我正在尝试解析一些我存储在redis数据库中的数据(在我的本地机器上,通过默认端口6739访问) . 本质上,任务是迭代数据库中的大约10K哈希结构,从当前在哈希中的字段计算新字段,然后将该新字段写回数据库,这样我就不需要再次进行计算 .

我的脚本启动正常,连接到数据库,并通过大约9500的哈希值崩溃,然后崩溃“redis.exceptions.ConnectionError:错误111连接localhost:6379 . 连接被拒绝 . ”错误 . 我重新启动了EC2实例,我几次运行它,每次都在同一个地方崩溃 .

知道可能会发生什么吗?为什么redis可以用于某些数据集然后崩溃?

编辑:这是执行的输出 . 它在死前大约需要3分半钟 .

$ sudo python parser.py 
Added 0 out of 10378 to dictionary: 22:48:53
Added 100 out of 10378 to dictionary: 22:48:54
Added 200 out of 10378 to dictionary: 22:48:55
Added 300 out of 10378 to dictionary: 22:48:57
Added 400 out of 10378 to dictionary: 22:48:58
Added 500 out of 10378 to dictionary: 22:49:00
...
Added 9000 out of 10378 to dictionary: 22:51:16
Added 9100 out of 10378 to dictionary: 22:51:30
Added 9200 out of 10378 to dictionary: 22:51:44
Added 9300 out of 10378 to dictionary: 22:52:00
Added 9400 out of 10378 to dictionary: 22:52:15
Added 9500 out of 10378 to dictionary: 22:52:17
Traceback (most recent call last):
  File "parser.py", line 180, in <module>
   buildDictionary(force=True)
  File "parser.py", line 123, in buildDictionary
   addPostToDict(postid)
  File "parser.py", line 92, in addPostToDict
    comments = [contentFromId(commentid) for commentid in commentids]
  File "parser.py", line 72, in contentFromId
    content = db.hget(contentid, keyword)
  File "/usr/local/lib/python2.7/dist-packages/redis/client.py", line 1539, in hget
    return self.execute_command('HGET', name, key)
  File "/usr/local/lib/python2.7/dist-packages/redis/client.py", line 464, in execute_command
    connection.send_command(*args)
  File "/usr/local/lib/python2.7/dist-packages/redis/connection.py", line 334, in send_command
    self.send_packed_command(self.pack_command(*args))
  File "/usr/local/lib/python2.7/dist-packages/redis/connection.py", line 316, in send_packed_command
    self.connect()
  File "/usr/local/lib/python2.7/dist-packages/redis/connection.py", line 253, in connect
    raise ConnectionError(self._error_message(e))
redis.exceptions.ConnectionError: Error 111 connecting localhost:6379. Connection refused.

2 回答

  • 0

    您可以在Redis中设置超时和内存限制,以确保它处理长时间的连接和超时

  • 0

    所以答案结果是我的Redis数据库对于我的小EC2实例的内存来说太大了 . 正如Itamar在评论中指出的那样,Redis将所有内容存储在内存中 . 一旦我的作业向数据库添加了太多项目并填满了所有可用内存,Redis就会拒绝所有进一步添加到数据库的请求 .

    我观察到的事情可能有助于您诊断:

    • 以后的工作开始时间越来越长(你可以在EDIT中看到开头每100个工作需要1-2秒的问题,但最后每100个工作需要15秒)

    • 我降低了我的Redis商店可以使用的最大内存量,并且它开始失败了

相关问题