Saya suka menggunakan nama verbose di Redis, misalnya set-allBooksBelongToUser:$userId
.
Apakah ini ok atau apakah itu berdampak pada kinerja?
Saya suka menggunakan nama verbose di Redis, misalnya set-allBooksBelongToUser:$userId
.
Apakah ini ok atau apakah itu berdampak pada kinerja?
Jawaban:
Kunci yang Anda bicarakan tentang penggunaan tidak terlalu lama.
Contoh kunci yang Anda berikan adalah untuk satu set, set metode pencarian adalah O (1). Operasi yang lebih kompleks pada set (SDIFF, SUNION, SINTER) adalah O (N). Kemungkinan populasinya $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 kunci mereka hanya "foo", Anda dapat menjalankan tes kunci pendek 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);
Inilah kecepatan uji GET untuk 3 kali pemanggilan kunci "foo" selanjutnya:
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 lagi untuk "ipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumloreipsumlorem: 1234567890" memberikan ini:
58479.53 requests per second
58139.53 requests per second
56179.77 requests per second
Jadi kunci yang sangat panjang sekalipun tidak memiliki dampak besar pada kecepatan redis. Dan ini pada GET, operasi O (1). Operasi yang lebih kompleks akan menjadi kurang sensitif terhadap hal ini.
Saya pikir memiliki kunci yang secara jelas mengidentifikasi nilai-nilai apa yang dipegangnya jauh lebih besar daripada kinerja kecepatan sangat kecil yang akan Anda dapatkan dari kunci yang disingkat.
Jika Anda ingin melanjutkan ini, 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 di menguji kode dengan panjang berapa pun yang Anda inginkan.
Redis suka menyimpan semua tombol di memori. Semakin lama panjang kunci rata-rata, semakin sedikit yang dapat disimpan di memori. Jadi ya, panjang kunci dapat sangat memengaruhi kinerja tetapi mungkin tidak signifikan dalam cara Anda khawatir. Yaitu, dengan ruang tombol yang kecil (mis. Yang cocok dengan mudah dalam memori), kunci 128 byte dan kunci 16 byte tidak akan bekerja secara berbeda secara dramatis.
Saya tidak bisa menjawab pertanyaan ini dengan pasti. Namun, saya dapat mengajukan beberapa pertanyaan tentang hal itu dan menawarkan beberapa pengamatan.
Saya pikir jelas bahwa kunci yang sangat panjang (nama) dan / atau nilai akan memiliki dampak kinerja pada kinerja keseluruhan jika mereka dapat digunakan sama sekali. Dampak ini bisa di klien, melalui jaringan, atau di server. Jadi pertanyaan pertama yang harus Anda tarik adalah:
Berapa lama kunci dan nilai antara Redis dan klien Anda?
Mencari di Redis , panjang dan batas kunci memberi saya entri blog yang menarik tentang Redis vs memcached yang mungkin mulai menjawab pertanyaan Anda. Respons pertama terhadap entri blog itu tampaknya ditulis oleh Salvatore Sanfilipo, pencipta Redis (awal musim gugur lalu: 09/2010) yang menunjukkan bahwa versi yang lebih baru akan menunjukkan hasil yang jauh lebih baik. Dua komentar di bawah dari tautan itu kami ke Redis Salvatore / Benchmark memcached yang diposting beberapa hari setelah ia menanggapi "blagger" asli (yang tampaknya anonim).
Ini tidak menjawab pertanyaan (berapa lama kunci bisa dan pada titik mana ada dampak yang dapat dideteksi terhadap kinerja). Namun, itu memberi kita petunjuk tentang pendekatan pertanyaan.
Penulis kedua artikel ini menulis kode dan mengujinya ... dan membuat grafik hasilnya.
Kita bisa membuat segala macam dugaan. Kita bisa melihat kodenya dan mencoba beralasan.
Namun, cara paling bermakna untuk mendekati pertanyaan semacam ini adalah menulis beberapa kode untuk mengukur satu pola penggunaan yang diajukan ... dan beberapa lagi untuk menguji yang lain (misalnya rentang panjang kunci mulai dari 8 karakter hingga ... bagaimana Anda ingin ... 8 kilobyte?) ... dan mengukurnya.
Saya tidak berpikir panjang nama variabel akan mempengaruhi kinerja, variabel akan mengambil tempat yang sama seperti variabel apa pun akan mengambil untuk tipe data sejauh Anda tidak melebihi panjang nama maksimum.