sql >> Databasteknik >  >> NoSQL >> Redis

Påverkar namnlängd prestanda i Redis?

Nyckeln du pratar om att använda är egentligen inte så lång.

Exempelnyckeln du ger är för en uppsättning, uppsättningsmetoderna är O(1). De mer komplexa operationerna på en uppsättning (SDIFF, SUNION, SINTER) är O(N). Chansen är stor att $userId fylls i var en dyrare operation än att använda en längre nyckel.

Redis kommer med ett benchmark-verktyg som heter redis-benchmark , om du ändrar "GET"-testet i src/redis-benchmark.c så att nyckeln bara är "foo", kan du köra kortnyckeltestet efter en 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);

Här är GET-testhastigheten för 3 efterföljande körningar av kortknappen "foo":

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

Här är GET-testhastigheten efter att du ändrat källan igen och ändrat nyckeln till "set-allBooksBelongToUser:1234567890":

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

Changing the key yet again to "ipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumlorem:1234567890" gives this:

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

Så även riktigt riktigt långa tangenter har ingen stor inverkan på redishastigheten. Och detta är på GET, en O(1) operation. Mer komplexa operationer skulle vara ännu mindre känsliga för detta.

Jag tror att att ha nycklar som tydligt identifierar vilka värden de har uppväger avsevärt alla minimala hastighetsprestanda du skulle få ut av förkortade nycklar.

Om du vill ta det här längre, finns det också en -r [keyspacelen] parametern på verktyget redis-benchmark som låter det skapa slumpmässiga nycklar (så länge de har ':rand:' i sig), kan du bara öka storleken på prefixet i testkoden till vilken längd du vill.



  1. Batchuppsättningsdata från Dictionary till Redis

  2. Räkna fält i en MongoDB-samling

  3. Vad är det korrekta sättet att göra en HAVING i en MongoDB GROUP BY?

  4. Aktivera datakomprimering i MongoDB 3.0