Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

Apakah panjang nama memengaruhi kinerja di Redis?

Kunci yang Anda bicarakan tidak terlalu panjang.

Contoh kunci yang Anda berikan adalah untuk satu set, metode pencarian set adalah O(1). Operasi yang lebih kompleks pada himpunan (SDIFF, SUNION, SINTER) adalah O(N). Kemungkinannya adalah mengisi $userId adalah operasi yang lebih mahal daripada menggunakan kunci yang lebih panjang.

Redis hadir dengan utilitas benchmark yang disebut redis-benchmark , jika Anda memodifikasi tes "GET" di src/redis-benchmark.c sehingga kuncinya hanya "foo", Anda dapat menjalankan tes kunci singkat setelah 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);

Berikut adalah kecepatan tes GET untuk 3 proses berikutnya dari kunci pendek "foo":

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

Inilah kecepatan uji GET setelah memodifikasi sumber lagi dan mengubah kunci menjadi "set-allBooksBelongToUser:1234567890":

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

Mengubah kunci sekali lagi menjadi "ipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreiploreiploreipsumloresumipsumloreiploreiploreip memberi ini:":12

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

Jadi, kunci yang sangat panjang pun tidak berdampak besar pada kecepatan redis. Dan ini pada GET, operasi O(1). Operasi yang lebih kompleks akan menjadi kurang sensitif terhadap hal ini.

Menurut saya, memiliki kunci yang secara jelas mengidentifikasi nilai apa yang dipegangnya melebihi performa kecepatan sangat kecil yang akan Anda dapatkan dari kunci yang disingkat.

Jika Anda ingin melangkah lebih jauh, ada juga -r [keyspacelen] parameter pada utilitas redis-benchmark yang memungkinkannya membuat kunci acak (selama mereka memiliki ':rand:' di dalamnya), Anda bisa menambah ukuran awalan dalam kode pengujian ke panjang apa pun yang Anda inginkan.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Siaran pesan gagal-aman untuk dikonsumsi oleh penerima tertentu menggunakan redis dan python

  2. Pod DigitalOcean memiliki PersistentVolumeClaims langsung yang tidak terikat

  3. Pemberitahuan redis:Dapatkan kunci dan nilai saat kedaluwarsa

  4. Bagaimana menerapkan multitenancy untuk redis di boot musim semi

  5. Redis - Menggunakan nilai Inc dalam transaksi