Redis在长字符串上超时(低于最大512 MB)

时间:2017-01-11 16:33:35

标签: ruby redis

这是使用Ruby client

> long_string = 'x' * 9_000_000; "created"
"created"
> long_string.bytesize / (1024.0 * 1024.0) # size in megabytes
8.58306884765625
> client.set('test', long_string)
Redis::TimeoutError: Connection timed out

我在五秒钟后(默认超时)收到超时错误。当我将超时提升到十分钟时,它仍然会失败。这种情况是否发生似乎也取决于过去对client.set的调用,即使是在不同的密钥上也是如此。

根据documentation,字符串的最大大小为512 MB。这过于乐观吗?

This answer含糊地暗示Redis并不打算处理长串。这是什么,或者是Ruby库中的问题?

1 个答案:

答案 0 :(得分:1)

这不是Redis限制,更可能是客户端设置。使用不同的客户端(Python' redis-py)重复示例不会重现该问题:

In [1]: long_string = "x" * 9000000

In [2]: len(long_string) / (1024.0 ** 2)
Out[2]: 8.58306884765625

In [3]: import redis

In [4]: r = redis.StrictRedis()

In [5]: r.set('test', long_string)
Out[5]: True

In [6]: longer = long_string * 50

In [7]: r.set('test2', longer)
Out[7]: True

In [8]: r.strlen('test2')
Out[8]: 450000000