Найти Π² Π”Π·Π΅Π½Π΅
2022 подписчика

πŸ‘£ Π’Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Redis ΠΈ Go


Go - ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ язык для создания Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π° Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π²Π΅Π±-прилоТСния часто Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ.

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ΠΎΠΌ Π΄Π΅-Ρ„Π°ΠΊΡ‚ΠΎ для Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ являСтся Redis, Π½ΠΎ, популярныС сСгодня Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Go Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΡƒΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…, эффСктивных с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния памяти.

ВмСсто этого ΠΎΠ½ΠΈ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ []byte API, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π²Ρ‹ взаимодСйствуСтС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

// Π’ этом ΠΊΠΎΠ΄Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ https://github.com/redis/go-redis, Π½ΠΎ Ρ‚Π΅ ΠΆΠ΅
// ограничСния Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ для Rueidis ΠΈ Redigo.
func redisHandler(w http.ResponseWriter, r *http.Request) {
ctx := context.Background()

// Extract key from RequestURI
key := strings.TrimLeft(r.RequestURI, "/")

// Get the value from Redis as a byte slice
val, err := rdb.Get(ctx, key).Bytes()
if err == redis.Nil {
http.Error(w, "Key not found in Redis", http.StatusNotFound)
return
} else if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}

_, err = w.Write(val)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
}
}

Π­Ρ‚ΠΎΡ‚ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Ссли Π²Ρ‹ ΠΊΡΡˆΠΈΡ€ΡƒΠ΅Ρ‚Π΅ нСбольшиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π½ΠΎ Ссли Π²Ρ‹ ΠΊΡΡˆΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π±ΠΎΠ»Π΅Π΅ 1 ΠΊΠ±, []byte-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ API Ρ€Π°Π±ΠΎΡ‚ΡŽΡ‚ Π½Π΅ Ρ‚Π°ΠΊ Ρ…ΠΎΡ€ΠΎΡˆΠΎ.

Π’ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π΅ Redis Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ Ρ‚Π°ΠΊΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ мСшало Π±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹ΠΉ API. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ пСрдставляСм redjet, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Redis, ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ redjet Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

func redisHandler(w http.ResponseWriter, r *http.Request) {
ctx := context.Background()

// Π˜Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π° ΠΈΠ· RequestURI
key := strings.TrimLeft(r.RequestURI, "/")

// ΠŸΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ нСпосрСдствСнно ΠΈΠ· Redis Π² ΠΎΡ‚Π²Π΅Ρ‚.
_, err := rdb.Command("GET", key).WriteTo(w)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
}
}

Код стал ΠΏΡ€ΠΎΡ‰Π΅ ΠΈ эффСктивнСС.

go get github.com/coder/redjet@latest

β–ͺGithub

1 ΠΌΠΈΠ½ΡƒΡ‚Π°