2017-01-11 12 views
1

これはRuby clientを使用しています。長い文字列でRedisタイムアウト(最大512 MB未満)

> 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 

5秒後にタイムアウトエラーが発生します(デフォルトのタイムアウト)。タイムアウトを10分にしても、それでも失敗します。これが起こるかどうかは、異なるキーでさえも、client.setへの過去の呼び出しに依存するようです。

documentationによると、文字列の最大サイズは512 MBです。これは楽観的過ぎ?

This answerは、Redisが長い文字列を扱うことを意図していないことを漠然と示唆しています。それは何が起こっているのですか、それともRubyライブラリの問題ですか?

+0

Redisは同じマシン上または別のサーバー上で実行されていますか? – spickermann

+0

@spickermann:開発用のローカルRedisインスタンスと本番用のHeroku Redisインスタンスがあり、両方で表示しています。 (ただし、ローカルインスタンスはkaputを実行する前に長い文字列を処理できるように見えますが)。 –

答えて

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 
+0

偉大な、私はそれらにバグレポートを作成します。ありがとう! –

関連する問題