Secara umum, setelah klien Redis mengeluarkan permintaan, biasanya memblokir dan menunggu server Redis diproses. Setelah server Redis menyelesaikan pemrosesan, ia akan mengembalikan hasilnya ke klien melalui pesan respons setelah meminta perintah.
Rasanya ini sedikit mirip dengan pemindaian HBase. Biasanya, klien mendapatkan setiap catatan dan memanggil server sekaligus.
Di Redis, adakah yang mirip dengan caching pemindai HBase, yang mengembalikan beberapa catatan pada satu permintaan?
Ya, itu Pipline. Pendahuluan Resmi http://redis.io/topics/pipelining
Ketika ada banyak operasi melalui pipa, kami dapat menghemat banyak waktu yang terbuang untuk penundaan jaringan. Perlu dicatat bahwa perintah dikemas dan dikirim menggunakan pipa. Redis harus menyimpan hasil pemrosesan semua perintah sebelum memproses semua perintah. Semakin banyak perintah yang Anda kemas, semakin banyak memori yang Anda konsumsi. Jadi bukan bahwa semakin banyak perintah yang dikemas, semakin baik.
Saat menggunakan pipa, kinerja telah sangat ditingkatkan ketika membaca dan menulis redis dalam batch.
Java mengujinya:
Paket com.lxw1234.redis; import java.util.hashmap; impor java.util.map; impor java.util.set; impor redis.clients.jedis.jedis; impor redis.clients.jedis.pipeline public; Import redis.clients.jedis.response; public class. Jedis redis = jedis baru ("127.0.0.1", 6379, 400000); Peta <string, string> data = new HashMap <string, string> (); Redis.Select (8); redis.flushdb (); // hmset long start = system.currentTimemillis (); // langsung HMSET untuk (int i = 0; i <10000; i ++) {data.clear (); data.put ("k_" + i, "v_" + i); redis.hmset ("key_" + i, data); } long end = System.currentTimeMillis (); System.out.println ("DBSIZE: [" + REDIS.DBSIZE () + "] .."); System.out.println ("Hmset tanpa pipa digunakan [" + (end - start) / 1000 + "] detik .."); Redis.Select (8); redis.flushdb (); // Gunakan pipa HMSET Pipeline P = redis.pipelined (); start = system.currentTimeMillis (); untuk (int i = 0; i <10000; i ++) {data.clear (); data.put ("k_" + i, "v_" + i); p.hmset ("key_" + i, data); } p.sync (); end = system.currentTimemillis (); System.out.println ("DBSIZE: [" + REDIS.DBSIZE () + "] .."); System.out.println ("HMset dengan pipa yang digunakan [" + (end -start) / 1000 + "] detik .."); // hmget set <string> keys = redis.keys ("*"); // gunakan jedis hgetall start = system.currentTimeMillis (); Peta <string, peta <string, string >> result = new HashMap <string, peta <string, string >> (); untuk (tombol string: tombol) {result.put (tombol, redis.hgetall (key)); } end = system.currentTimeMillis (); System.out.println ("Ukuran Hasil: [" + result.size () + "] .."); System.out.println ("Hgetall tanpa pipa digunakan [" + (end - start) / 1000 + "] detik .."); // Gunakan Pipeline Hgetall Map <String, Response <Map <String, String >>>> Responses = new HashMap <String, Response <Map <String, String >>> (keys.size ()); result.clear (); start = system.currentTimeMillis (); untuk (tombol string: tombol) {responses.put (key, p.hgetall (key)); } p.sync (); untuk (string k: responses.keyset ()) {result.put (k, responses.get (k) .get ()); } end = system.currentTimeMillis (); System.out.println ("Ukuran Hasil: [" + result.size () + "] .."); System.out.println ("Hgetall dengan pipa digunakan [" + (end - start) / 1000 + "] detik .."); redis.disconnect (); }} Hasil tes adalah sebagai berikut:
DBSIZE: [10000] .. HMSET tanpa pipa digunakan [243] detik .. dbsize: [10000] .. HMSET dengan pipa yang digunakan [0] detik .. Ukuran hasil: [10000] .. Hgetall tanpa pipa digunakan [243] detik .. Ukuran hasil: [10000] .. Hgetall dengan pipa yang digunakan [0] detik .. detik ..
Menggunakan pipa untuk membaca dan menulis 10.000 catatan dalam batch adalah sepotong kue dan akan dilakukan dalam hitungan detik.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.