1. ホーム
  2. redis

[解決済み] Redisで名前の長さはパフォーマンスに影響しますか?

2022-05-12 02:01:46

質問

Redisで冗長な名前を使いたいのですが、例えば set-allBooksBelongToUser:$userId .

これは大丈夫なのか、それともパフォーマンスに影響があるのか?

解決方法は?

あなたが使っているキーはそんなに長くないんですよ。

あなたが挙げたキーの例は集合のもので、集合のルックアップ方法はO(1)です。 セットに対するより複雑な操作(SDIFF, SUNION, SINTER)はO(N)である。 このため $userId は、長いキーを使用するよりも高価な操作でした。

Redisには、ベンチマークユーティリティである redis-benchmark src/redis-benchmark.c の "GET" テストを修正して、キーが "foo" になるようにすれば、短いキーテストは make install :

diff --git a/src/redis-benchmark.c b/src/redis-benchmark.c
--- a/src/redis-benchmark.c
+++ b/src/redis-benchmark.c
@@ -475,11 +475,11 @@
         benchmark("MSET (10 keys)",cmd,len);
         free(cmd);

-        len = redisFormatCommand(&cmd,"SET foo:rand:000000000000 %s",data);
+        len = redisFormatCommand(&cmd,"SET foo %s",data);
         benchmark("SET",cmd,len);
         free(cmd);

-        len = redisFormatCommand(&cmd,"GET foo:rand:000000000000");
+        len = redisFormatCommand(&cmd,"GET foo");
         benchmark("GET",cmd,len);
         free(cmd);

以下は、ショートキー "foo" をその後3回実行したときのGETテスト速度です。

59880.24 requests per second
58139.53 requests per second
58479.53 requests per second

再度ソースを修正し、キーを "set-allBooksBelongToUser:1234567890" に変更した後の GET テスト速度がこちらです。

60240.96 requests per second
60606.06 requests per second
58479.53 requests per second

キーをもう一度、"に変更します。 ipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsem: 1234567890" とすると、このようになります。

58479.53 requests per second
58139.53 requests per second
56179.77 requests per second

つまり、本当に長いキーであっても、redisのスピードに大きな影響を与えないということです。 しかもこれはGETというO(1)の処理についてです。 もっと複雑な操作であれば、この影響はさらに小さくなるはずです。

どのような値を保持しているかが明確にわかるキーを持つことは、省略キーから得られるわずかな速度性能を大きく上回ると思います。

また、これをさらに推し進めると -r [keyspacelen] パラメータを使用すると、ランダムなキーを作成できます (ただし、':rand:' が含まれている必要があります)。