Jadual Kandungan
Semakan protokol RESP
如何拆解RESP协议
功能实现
Rumah pangkalan data Redis Penjelasan terperinci tentang contoh pelaksanaan protokol Redis RESP

Penjelasan terperinci tentang contoh pelaksanaan protokol Redis RESP

Sep 06, 2022 pm 05:36 PM
redis

Pembelajaran yang disyorkan: Tutorial video Redis

Semakan protokol RESP

RESP ialah TCP protokol komunikasi berdasarkan Redis Protokol dibahagikan dengan /r/n (baris Protokol menyokong 5 jenis maklumat adalah seperti berikut:

类型 前缀 备注
简单字符串 简单字符串以 开头
错误数据 - 错误数据以-开头
整数 : 整数以:开头
复杂字符串 $ 复杂字符串以$开头
数组 * 数组以*开头

即,我们向redis发送命令:set name pdudo,其实发送的具体信息是

*3
$3
set
$4
name
$5
pdudo
Salin selepas log masuk

而服务器返回的信息也是类似的,只不过还需要了解+-,这2个前缀分别代表正确消息和错误的消息。

我们准备2个例子,我们来敲一下

例子1

set name pdudo
Salin selepas log masuk

例子2

lpush pdudo data1
lpush pdudo data2
lrange pdudo 0 -1
Salin selepas log masuk

快来动动你的小手指,看能不能根据RESP协议规则,将上述例子命令敲出来。现在你体会到了Redis官网介绍RESP协议时所述的 简单易读 可么?

对于RESP来说,一定要搞清楚协议后,最好能够手写协议去执行,再考虑写程序去实现协议!!!

如何拆解RESP协议

终于到了喜闻乐见的环节了,我们要拆解和组装协议了。 那我们至少来解决如下3个问题:

  • 该协议是基于TCP流的,我们如何判断整个命令什么时候结束?
  • 如何拆解命令?

协议什么时候结束

一般而言,我们自己在使用TCP传输数据,都会在数据开头定义2个或者4个字节,用于存储该数据有多少个字节,这样方便检验接收,类似于这种情况。

RESP有意思了,它是以/r/n来分割的。最前面会以前缀来判断其类型,例如我们发送命令,其会用到的前缀有*以及$,那么我们如何来判断,我们要读取多少个/r/n呢?

因为上述*代表数组,即有多少组数据需要处理,图中为n

$表示复杂字符串,即需要获取m个字符数据,不包含/r/n

如何拆解RESP协议

若要拆解命令,则我们得获取命令,如上图所示,报文$m,其实记录的有m长度的数据(不包含\r\n),所以我们可以这样来写伪代码。

根据如上,我们很容易写出伪代码

func toArgs(rd *bufio.Reader) {
	data , _ , _ := rd.ReadLine()
	switch data[0] {
	case '*':
		n := data[1:] // 循环n次
		for i:=0;i<n;i++ {
			toArgs(rd)
		}
	case &#39;$&#39;:
		m := data[1:] // 获取m个数据
		// 获取m长度的数据即可
	}
}
Salin selepas log masuk

如上我们先获取前缀为*的,继而获取其值n,我们则循环n次,即可获取该报文的数据。而前缀为$的,我们可以直接获取该m长度的数据即可,这里主要要处理一下\r\n

将命令构建RESP报文规范,根据拆解反操作就可以了,这里暂不介绍了。

上述,我们核心功能已经探讨完毕了。

功能实现

代码已经编写完毕,放置在了gitee上: gitee

如上我们已经学会了如何拆解和组装RESP协议了,我们接着来看,我们如何用go来编写拆解和组装协议的代码呢? 我们可以看。

我们先创建一个字符,然后将其封装为bufio.Reader,我们来看下:

因为我们要使用readLine()函数,所以我们需要将其转换为bufio.Reader类型,若是直接从net.Conn中获取,不用转换,直接可以使用 bufio.Reader的。

我们将上述伪代码编写一下,实现拆解的功能。

其具体执行过程是我们先获取一行数据,放置到data中,而后判断其前缀是什么,若是*则取其后面的数据,将其转为int类型n,而后再递归该函数n次,而后中遇到$,我们则取后面的数据,也是将其转为int类型m,而后再取m长度的实际数据,这就是我们的命令了,最后我们再踢掉命令的\r\n即可。

其中,有一个函数是byteToInt是我们自己写的通过切片转为数字的函数,我们看下

该函数主要的功能是将其[]byte数字转换为int数据。

如上,我们整个RESP协议功能写完了,我们运行下看下实际效果:

Jelas sekali, kami berjaya menyahhimpun data.

Dalam artikel ini, kami memperkenalkan cara menggunakan go untuk menyahhimpun kandungan protokol RESP Mengapa kami tidak memperkenalkan cara menulis redis perisian tengah induk-hamba?

Pada mulanya, saya bercadang untuk menulisnya seperti ini, tetapi dengan terlalu banyak pengetahuan, pengenalan akan menjadi sangat rumit, dan sukar untuk menerangkan satu perkara dengan jelas, jadi kami telah memilih satu titik teras untuk diperkenalkan secara berasingan Saya ingin memanggilnya Ia dipanggil pengaturcaraan berorientasikan teras (rakan saya memberitahu saya lama dahulu Apa yang dipanggil kesederhanaan pengaturcaraan berorientasikan teras bermakna apabila kita terlibat dalam fungsi, kita mesti belajar untuk membongkar). fungsi dan gunakan fungsi teras dahuludemoBuatnya, dan kemudian perlahan-lahan memperkayakan kawasan sekitar untuk melengkapkan keseluruhan pakej keperluan.

Akhirnya mari kita bincangkan tentang protokol RESP Laman web rasmi meringkaskannya dalam pengenalan sebagai Mudah untuk dilaksanakan, Analisis pantas, Boleh dibaca secara langsung<.>. Jika anda mengkaji kedua-dua artikel ini dengan teliti, anda pasti akan mempunyai pemahaman yang mendalam tentang perkara ini.

Pembelajaran yang disyorkan:

Tutorial video Redis

Atas ialah kandungan terperinci Penjelasan terperinci tentang contoh pelaksanaan protokol Redis RESP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Penyelesaian kepada ralat 0x80242008 semasa memasang Windows 11 10.0.22000.100 Penyelesaian kepada ralat 0x80242008 semasa memasang Windows 11 10.0.22000.100 May 08, 2024 pm 03:50 PM

1. Mulakan menu [Start], masukkan [cmd], klik kanan [Command Prompt], dan pilih Run as [Administrator]. 2. Masukkan arahan berikut mengikut turutan (salin dan tampal dengan teliti): SCconfigwuauservstart=auto, tekan Enter SCconfigbitsstart=auto, tekan Enter SCconfigcryptsvcstart=auto, tekan Enter SCconfigtrustedinstallerstart=auto, tekan Enter SCconfigwuauservtype=share, tekan Enter netstopwuauserv , tekan enter netstopcryptS

Strategi dan pengoptimuman caching API Golang Strategi dan pengoptimuman caching API Golang May 07, 2024 pm 02:12 PM

Strategi caching dalam GolangAPI boleh meningkatkan prestasi dan mengurangkan beban pelayan Strategi yang biasa digunakan ialah: LRU, LFU, FIFO dan TTL. Teknik pengoptimuman termasuk memilih storan cache yang sesuai, caching hierarki, pengurusan ketidaksahihan dan pemantauan dan penalaan. Dalam kes praktikal, cache LRU digunakan untuk mengoptimumkan API untuk mendapatkan maklumat pengguna daripada pangkalan data Data boleh diambil dengan cepat daripada cache Jika tidak, cache boleh dikemas kini selepas mendapatkannya daripada pangkalan data.

Mekanisme caching dan amalan aplikasi dalam pembangunan PHP Mekanisme caching dan amalan aplikasi dalam pembangunan PHP May 09, 2024 pm 01:30 PM

Dalam pembangunan PHP, mekanisme caching meningkatkan prestasi dengan menyimpan sementara data yang kerap diakses dalam memori atau cakera, dengan itu mengurangkan bilangan akses pangkalan data. Jenis cache terutamanya termasuk memori, fail dan cache pangkalan data. Caching boleh dilaksanakan dalam PHP menggunakan fungsi terbina dalam atau perpustakaan pihak ketiga, seperti cache_get() dan Memcache. Aplikasi praktikal biasa termasuk caching hasil pertanyaan pangkalan data untuk mengoptimumkan prestasi pertanyaan dan caching halaman output untuk mempercepatkan pemaparan. Mekanisme caching berkesan meningkatkan kelajuan tindak balas laman web, meningkatkan pengalaman pengguna dan mengurangkan beban pelayan.

Bagaimana untuk menaik taraf Win11 English 21996 kepada Simplified Chinese 22000_Cara untuk menaik taraf Win11 English 21996 kepada Simplified Chinese 22000 Bagaimana untuk menaik taraf Win11 English 21996 kepada Simplified Chinese 22000_Cara untuk menaik taraf Win11 English 21996 kepada Simplified Chinese 22000 May 08, 2024 pm 05:10 PM

Mula-mula anda perlu menetapkan bahasa sistem kepada paparan Bahasa Cina Mudah dan mulakan semula. Sudah tentu, jika anda telah menukar bahasa paparan kepada Bahasa Cina Ringkas sebelum ini, anda boleh melangkau langkah ini sahaja. Seterusnya, mula mengendalikan pendaftaran, regedit.exe, navigasi terus ke HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlNlsLanguage dalam bar navigasi kiri atau bar alamat atas, dan kemudian ubah suai nilai kunci InstallLanguage dan nilai kunci Lalai kepada 0804 (jika anda ingin menukarnya ke Bahasa Inggeris en- kami, anda perlu Mula-mula tetapkan bahasa paparan sistem kepada en-us, mulakan semula sistem dan kemudian tukar semuanya kepada 0409) Anda mesti memulakan semula sistem pada ketika ini.

Bagaimana untuk menggunakan cache Redis dalam penomboran tatasusunan PHP? Bagaimana untuk menggunakan cache Redis dalam penomboran tatasusunan PHP? May 01, 2024 am 10:48 AM

Menggunakan cache Redis boleh mengoptimumkan prestasi halaman tatasusunan PHP. Ini boleh dicapai melalui langkah berikut: Pasang klien Redis. Sambung ke pelayan Redis. Cipta data cache dan simpan setiap halaman data ke dalam cincangan Redis dengan kunci "halaman:{page_number}". Dapatkan data daripada cache dan elakkan operasi mahal pada tatasusunan besar.

Bagaimana untuk mencari fail kemas kini yang dimuat turun oleh Win11_Share lokasi fail kemas kini yang dimuat turun oleh Win11 Bagaimana untuk mencari fail kemas kini yang dimuat turun oleh Win11_Share lokasi fail kemas kini yang dimuat turun oleh Win11 May 08, 2024 am 10:34 AM

1. Mula-mula, klik dua kali ikon [PC ini] pada desktop untuk membukanya. 2. Kemudian klik dua kali butang tetikus kiri untuk memasuki [pemacu C]. 3. Kemudian cari folder [windows] dalam pemacu C dan klik dua kali untuk masuk. 4. Selepas memasukkan folder [windows], cari folder [SoftwareDistribution]. 5. Selepas masuk, cari folder [muat turun], yang mengandungi semua fail muat turun dan kemas kini win11. 6. Jika kita ingin memadam fail-fail ini, hanya padamkannya terus dalam folder ini.

Aplikasi caching PHP Redis dan amalan terbaik Aplikasi caching PHP Redis dan amalan terbaik May 04, 2024 am 08:33 AM

Redis ialah cache nilai kunci berprestasi tinggi. Sambungan PHPRedis menyediakan API untuk berinteraksi dengan pelayan Redis. Gunakan langkah berikut untuk menyambung ke Redis, menyimpan dan mendapatkan semula data: Sambung: Gunakan kelas Redis untuk menyambung ke pelayan. Penyimpanan: Gunakan kaedah yang ditetapkan untuk menetapkan pasangan nilai kunci. Retrieval: Gunakan kaedah get untuk mendapatkan nilai kunci.

Mengapa ralat berlaku semasa memasang pelanjutan menggunakan PECL dalam persekitaran Docker? Bagaimana menyelesaikannya? Mengapa ralat berlaku semasa memasang pelanjutan menggunakan PECL dalam persekitaran Docker? Bagaimana menyelesaikannya? Apr 01, 2025 pm 03:06 PM

Punca dan penyelesaian untuk kesilapan Apabila menggunakan PECL untuk memasang sambungan dalam persekitaran Docker Apabila menggunakan persekitaran Docker, kami sering menemui beberapa sakit kepala ...

See all articles