2

以下の疑似コードのように、redis の簡単なベンチマーク コードを作成しました。

for 10~100 redis sessions:
  for n time:
    key = some_random_string(key_size) # about 100 byte
    data = some_random_string(data_size) # about 100k~1m
    session.command("SET %s %s", key, data)
    session.command("GET %s", key)
    session.command("DEL %s", key)

ベンチマーク プログラムが起動すると、redis-server プロセスのメモリ使用量が単調に増加し、物理メモリ バウンド (8 GB) に達してセッション終了時に解放されます。キーの同時数はセッション数に制限されるため、データ セットのピーク サイズはそれほど大きくないはずです。

これは設計による意図的な動作ですか? または私はそれを悪用しましたか?

4

1 に答える 1

0

最大値が1MBであるとすると、接続ごとに最大3 MBが必要です。1は入力バッファー(SET)、1はRedisに格納された値、1は出力バッファー(GET)です。入力バッファと出力バッファが接続に接続されています。INFOコマンドによって返されるclient_biggest_input_bufを確認できます。

注:Redisは、実際には大きな文字列オブジェクトを格納するようには設計されていません。

とはいえ、短いCプログラム、Redis 2.5.11、および270接続では、説明した動作を再現できません。

MONITORコマンドを同時に実行していない、SLOWLOG構成ですべてのトラフィックをRedisに蓄積していない、またはネットワークリンクがトラフィックに対応できないスレーブインスタンスがないことを確認しますか?

于 2012-06-21T17:57:03.140 に答える