Command Protocol
Buyruqlar protokoli
Redis'ga ulanib, SET user:1 Aziz yoki GET user:1 kabi ODDIY, matnli buyruqlar yuborganingizni ko'rgan bo'lsangiz kerak. Bu — command protocol (buyruqlar protokoli): mijoz va server o'rtasidagi "til kelishuvi", oddiy matn qatorlarini strukturaviy buyruqlarga aylantiradi.
package main
import (
"fmt"
"strings"
)
type Command struct {
Op string
Key string
Value string
}
// parseCommand — "SET key value" yoki "GET key" kabi matnni Command'ga aylantiradi
func parseCommand(line string) (Command, error) {
parts := strings.Fields(line)
if len(parts) == 0 {
return Command{}, fmt.Errorf("bo'sh buyruq")
}
op := strings.ToUpper(parts[0])
switch op {
case "GET":
if len(parts) != 2 {
return Command{}, fmt.Errorf("GET uchun kalit kerak")
}
return Command{Op: "GET", Key: parts[1]}, nil
case "SET":
if len(parts) != 3 {
return Command{}, fmt.Errorf("SET uchun kalit va qiymat kerak")
}
return Command{Op: "SET", Key: parts[1], Value: parts[2]}, nil
default:
return Command{}, fmt.Errorf("noma'lum buyruq: %s", op)
}
}
func main() {
cmd, err := parseCommand("SET user:1 Aziz")
fmt.Println(cmd, err)
}strings.Fields(line) — "String Manipulation" darsida ko'rgan funksiya, matnni BO'SH JOY orqali bo'laklarga ajratadi (bir nechta ketma-ket bo'sh joy bo'lsa ham to'g'ri ishlaydi). switch op — buyruq turiga qarab TURLI tekshiruv va ma'lumot tuzilmasi yaratadi ("Switch Statement" darsini eslang), noto'g'ri formatdagi buyruqlar uchun ANIQ xato xabarlarini qaytaradi.
Bu — HTTP JSON API'ga MUQOBIL, YENGILROQ protokol: har bir buyruq bitta matn QATORI, va bu qatorlar tarmoq orqali (yoki bizning misolimizda — to'g'ridan-to'g'ri funksiya chaqiruvi orqali) yuborilishi mumkin. Redis'ning o'zi HAM shunga o'xshash (RESP deb ataluvchi) oddiy, matnga yaqin protokoldan foydalanadi.
>_ Exercise
Protokolga DEL (o'chirish) buyrug'ini qo'shing.
- •switch ichiga "DEL" case qo'shing: len(parts) != 2 bo'lsa xato, aks holda Command{Op: "DEL", Key: parts[1]} qaytaring
- •"DEL user:1" qatorini parseCommand orqali tahlil qiling
- •natijadagi cmd.Op va cmd.Key qiymatlarini chop eting
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
Command protocol — oddiy matn qatorlarini strukturaviy buyruqlarga aylantirib, cache bilan HTTP/JSON'dan yengilroq, tezroq usulda muloqot qilish imkonini beradi.
NEXT UP
Client Library
$ go run main.go
Kodingizni ishga tushiring