Go (Golang) के लिए Redis क्लाइंट: go-redis और radix
Redis सबसे लोकप्रिय in-memory डेटाबेस में से एक है, जिसका उपयोग कैशिंग, कतारों, सत्रों और real-time विश्लेषण के लिए किया जाता है। Go (Golang) इकोसिस्टम में Redis के साथ काम करने के लिए कई परिपक्व क्लाइंट मौजूद हैं। इस लेख में हम दो मुख्य लाइब्रेरियों पर विस्तार से चर्चा करेंगे: go-redis (सबसे लोकप्रिय क्लाइंट) और radix (अधिक प्रदर्शनशील और निम्न-स्तरीय)। आप सीखेंगे कि उन्हें कैसे स्थापित करें, कनेक्ट करें, बुनियादी संचालन करें, पाइपलाइन, Pub/Sub का उपयोग करें और क्लस्टर के साथ काम करें।
1. Go डेवलपर के लिए Redis क्यों महत्वपूर्ण है
Go को अक्सर उच्च-लोड वाले सर्वर एप्लिकेशन, माइक्रोसर्विसेज और इवेंट हैंडलर बनाने के लिए चुना जाता है। Redis निम्नलिखित कारणों से Go को पूरी तरह से पूरक करता है:
- गति — संचालन माइक्रोसेकंड में निष्पादित होते हैं।
- सरलता — न्यूनतम API, अंतर्निहित डेटा संरचनाएं (स्ट्रिंग्स, सूचियाँ, सेट, हैश)।
- Pub/Sub, लेन-देन और Lua-स्क्रिप्ट का समर्थन।
सही क्लाइंट का चयन प्रदर्शन और विकास की सुविधा निर्धारित करता है।
2. go-redis — वास्तविक मानक
go-redis (रिपॉजिटरी github.com/redis/go-redis/v9) Go के लिए सबसे लोकप्रिय Redis क्लाइंट है। यह उच्च-स्तरीय API, क्लस्टर, सेंटिनल, पाइपलाइन, Pub/Sub और वितरित लॉक का समर्थन प्रदान करता है।
2.1 स्थापना
go get github.com/redis/go-redis/v92.2 Redis से कनेक्शन
package main
import ( "context" "fmt" "github.com/redis/go-redis/v9")
func main() { ctx := context.Background()
rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // बिना पासवर्ड DB: 0, // डिफ़ॉल्ट डेटाबेस })
// कनेक्शन की जाँच pong, err := rdb.Ping(ctx).Result() if err != nil { panic(err) } fmt.Println(pong) // PONG}2.3 बुनियादी संचालन
// स्ट्रिंग सेट करनाerr := rdb.Set(ctx, "key", "value", 0).Err()if err != nil { panic(err)}
// स्ट्रिंग प्राप्त करनाval, err := rdb.Get(ctx, "key").Result()if err != nil { panic(err)}fmt.Println("key:", val)
// हैश के साथ काम करनाrdb.HSet(ctx, "user:1", "name", "Alice", "age", 30)name, _ := rdb.HGet(ctx, "user:1", "name").Result()fmt.Println("नाम:", name)
// कुंजी हटानाrdb.Del(ctx, "key")2.4 पाइपलाइन
पाइपलाइन आपको एक ही नेटवर्क कॉल में कई कमांड भेजने की अनुमति देती हैं, जिससे बैच संचालन काफी तेज हो जाता है।
pipe := rdb.Pipeline()
incr := pipe.Incr(ctx, "counter")pipe.Expire(ctx, "counter", time.Hour)
// सभी कमांड निष्पादित करें_, err := pipe.Exec(ctx)if err != nil { panic(err)}
fmt.Println("काउंटर का नया मान:", incr.Val())2.5 Pub/Sub
// सब्सक्राइबरsub := rdb.Subscribe(ctx, "mychannel")ch := sub.Channel()
for msg := range ch { fmt.Printf("प्राप्त: %s", msg.Payload)}
// प्रकाशक (दूसरे गोरूटीन में)rdb.Publish(ctx, "mychannel", "Go से नमस्ते!")2.6 क्लस्टर के साथ काम करना
clusterClient := redis.NewClusterClient(&redis.ClusterOptions{ Addrs: []string{ "localhost:7000", "localhost:7001", "localhost:7002", },})
// सामान्य क्लाइंट की तरह उपयोग करेंerr := clusterClient.Set(ctx, "cluster_key", "value", 0).Err()if err != nil { panic(err)}3. radix — हल्का और तेज़
radix (github.com/mediocregopher/radix/v4) न्यूनतम अमूर्तता वाला एक न्यूनतम क्लाइंट है। इसकी कोई निर्भरता नहीं है, यह सरल संचालन पर go-redis से तेज़ काम करता है और नेटवर्क स्तर पर पूर्ण नियंत्रण देता है।
3.1 स्थापना
go get github.com/mediocregopher/radix/v4