Eli Rose
Eli Rose

Reputation: 7018

Redis timing out on long strings (below the 512 MB max)

This is using the 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

I get the timeout error after five seconds (the default timeout). When I raise the timeout even to ten minutes, it still fails. Whether this happens also seems to be dependent on past calls to client.set, even at different keys.

According to the documentation, the max size for strings is 512 MB. Is this over-optimistic?

This answer vaguely suggests that Redis is not meant to handle long strings. Is that what's going on, or is the issue in the Ruby library?

Upvotes: 1

Views: 478

Answers (1)

Itamar Haber
Itamar Haber

Reputation: 50052

This isn't a Redis limitation, more likely a client setting. Repeating the example with a different client (Python's redis-py) does not reproduce the issue:

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

Upvotes: 1

Related Questions