这是使用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库中的问题?
答案 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