आप जिस कुंजी का उपयोग करने की बात कर रहे हैं वह वास्तव में इतनी लंबी नहीं है।
आपके द्वारा दी गई उदाहरण कुंजी एक सेट के लिए है, सेट लुकअप विधियां ओ (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
स्रोत को फिर से संशोधित करने और कुंजी को "सेट-ऑलबुक्सबेलोंगटॉयूसर:1234567890" में बदलने के बाद GET परीक्षण गति यहां दी गई है:
60240.96 requests per second
60606.06 requests per second
58479.53 requests per second
कुंजी को फिर से "ipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumlore" में फिर से बदलना
58479.53 requests per second
58139.53 requests per second
56179.77 requests per second
तो वास्तव में वास्तव में लंबी चाबियों का भी रेडिस की गति पर बड़ा प्रभाव नहीं पड़ता है। और यह जीईटी पर है, एक ओ (1) ऑपरेशन। अधिक जटिल ऑपरेशन इसके प्रति और भी कम संवेदनशील होंगे।
मुझे लगता है कि आपके पास ऐसी कुंजियाँ हैं जो स्पष्ट रूप से पहचानती हैं कि उनके पास कौन से मान हैं जो किसी भी छोटी गति के प्रदर्शन से अधिक हैं जो आपको संक्षिप्त कुंजियों से प्राप्त होंगे।
यदि आप इसे और आगे ले जाना चाहते हैं, तो एक -r [keyspacelen]
भी है रेडिस-बेंचमार्क उपयोगिता पर पैरामीटर जो इसे यादृच्छिक कुंजी बनाने देता है (जब तक उनके पास ':रैंड:' होता है), आप परीक्षण कोड में उपसर्ग के आकार को अपनी इच्छानुसार बढ़ा सकते हैं।