Redis 通讯协议的疑问
怪我咯
怪我咯 2017-04-21 10:57:48
0
3
633

关于通讯协议,见https://redis.readthedocs.org/en/latest/topic/protocol.html

1)命令 set mykey myvalue 对应 要发送到Redis的字符串(要转化为二进制数据)是

"*3\r\n$3\r\nset\r\n$5\r\nmykey\r\n$7\r\nmyvalue\r\n"

2)命令 get mykey 对应字符串是 "*2\r\n$3\r\nget\r\n$5\r\nmykey\r\n"

3)最后得到Redis发回的响应是 "+OK\r\n$7\r\nmyvalue\r\n"

我的问题是,Redis这样的响应格式,是否意味者 客户端发完命令(需要得到返回

值的命令如get)后,必须要等待回应到达之后才能发送下一个命令? 这样对客户端来说 效率是否低了点?

怪我咯
怪我咯

走同样的路,发现不同的人生

membalas semua(3)
左手右手慢动作

Ini ialah kaedah penstriman TCP biasa.

阿神

"Kecekapan rendah untuk pelanggan" anda hanyalah fantasi anda, bukan? Adakah terdapat sebarang data untuk menyokong ini? Tanpa sebarang data untuk menyokongnya, bolehkah ia dinilai dengan betul berdasarkan perasaan subjektif?

Terdapat juga hubungan antara kecekapan dan perniagaan Secara umumnya, hanya apabila kecekapan tidak menyokong perniagaan, anda akan mula mempertimbangkan isu kecekapan bukankah terlalu awal untuk anda mempertimbangkan kecekapan ini sebelum anda melakukan apa-apa ?

Satu tambahan terakhir. . Ini ialah definisi dalam protokol tcp Jika terdapat apa-apa yang tidak jelas, http://en.wikipedia.org/wiki/Transmission_Control_Protocol pergi ke sini untuk mengetahui tentang spesifikasi tcp. .

迷茫

Mungkin soalan ini menjadi: Bolehkah redis hanya menghantar satu arahan dalam satu permintaan? Ia akan menjadi lebih baik

Kesimpulan: Tidak kira protokol permintaan redis yang digunakan, penghantaran berbilang arahan dalam satu permintaan disokong


protokol permintaan redis

Format protokol permintaan redis bukan standard (juga dikenali sebagai Sebaris):

Nama perintah Parameter 1 Parameter 2 ... Parameter N

tetapkan nama diaocow

Format protokol permintaan redis standard:

*<Bilangan parameter>CR LF
$<Bilangan bait parameter 1>CR LF <Data parameter 1>CR LF
...
$<Bilangan bait parameter N>CR LF
<Data parameter N>CR LF

*3rn$3rnsetrn$4rnnamern$7rndiaocowrn

Jadi apabila kita perlu menetapkan nilai nama kunci kepada diaocow, kita boleh menggunakan dua format protokol di atas (pembaca yang berminat boleh menggunakan arahan telnet atau nc untuk mengujinya sendiri)

Bagaimanakah protokol permintaan Redis menyokong pelaksanaan kelompok? (Inilah yang semua orang sering panggil mod saluran paip)

Sebagai contoh, saya perlu melaksanakan dua arahan berikut dalam kelompok:

  1. tetapkan nama diaocow

  2. tetapkan negara china

Kemudian data dalam permintaan akan kelihatan seperti ini (dengan mengandaikan kami menggunakan protokol standard): *3rn$3rnsetrn$4rnnamern$7rndiaocowrn*3rn$3rnsetrn$7rncountryrn$5rnchinarn

Kemudian di dalam redis, ia akan dihuraikan seperti ini, kod pseudo:

def processInputBuffer(client): 
    while (len(client.querybuf) > 0): 
        # 获取命令名,参数个数,参数数组以及当前读取到querybuf位置 
        cmd, argc, argv, pos = parseCommandInfo(client.querybuf) 
        # 执行命令 
        processCommand(cmd, argc, argv) 
        # 切换到下一个命令 
        client.querybuf = client.querybuf[pos:-1] 

parseCommandInfo akan dihuraikan mengikut protokol yang berbeza: jika bait pertama ialah '*', protokol standard akan digunakan

Catatan: Semua pelanggan redis melaksanakan fungsi menghantar arahan secara berkelompok, yang tidak lebih daripada menghantar berbilang arahan kepada redis mengikut format yang baru kami nyatakan Pembaca yang berminat boleh merujuk kepada bahasa anda biasa dengan Pelanggan

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan