我通过 redis-py 使用 Python 中的 Redis 将 JSON 存储在排序集中。
一切正常,直到我尝试从 Redis 中获取一定数量的数据。
redis.StrictRedis(host='localhost', port=6379, db=12)
redis_client.zrange('key', 0, 20, 'desc')
可以正常工作,因为我只要求 20 个条目。
一旦我尝试超过 35 的任何东西,我就会得到:
ConnectionError: Socket closed on remote end
我已经尝试通过将查询“分块”成 5 个一组来解决这个问题,但似乎我对 Redis 的访问速度非常快,有很多 5 个查询,这仍然会导致异常。
我是否以某种方式 DDOSing redis?
我在 Windows 和 Ubuntu 上都试过了。
上周我实际上一次处理了多达 100 个条目,并且如果我以 10 个为一组进行分块,那么我的 Redis 服务器似乎变得更加敏感。
这是一个重现错误的小脚本。
import redis
import ujson as json
r = redis.StrictRedis(host="localhost", port=6379, db=12)
dummy_json = {"data":"hfoiashflkasdjaisdäjpagufeiaghaifhaspdas",
"more": "sdasdpjapsfdjapsofjaspofjsapojfpoasjfpoajfp",
"more1": "sdasdpjapsfdjapsofjaspofjsapojfpoasjfpoajfp",
"more2": "sdasdpjapsfdjapsofjaspofjsapojfpoasjfpoajfp",
"more3": "sdasdpjapsfdjapsofjaspofjsapojfpoasjfpoajfp",
"more4": "sdasdpjapsfdjapsofjaspofjsapojfpoasjfpoajfp"}
for score in xrange(0, 6000):
dummy_json["score"]=score
r.zadd("test", score, json.dumps(dummy_json))
result = r.zrange('test', 0, 200, 'desc')
print result
您会看到,如果您dummy_json
一次保留更少的数据或请求更少的条目,异常就会消失。