利用 Go 語言加速 Redis 操作:掌握 go-redis 包的高效應用技巧
一、golang 操作 redis
1、安裝
- 初始化文件夾
c:\aaa> mkdir testredis
c:\aaa\testredis> go mod init testredis
- 安裝
go get github.com/go-redis/redis/v8
2、基本使用
package main
import (
"context"
"fmt"
"github.com/go-redis/redis/v8"
"time"
)
var ctx = context.Background()
func main() {
//連接redis數據庫
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password set
DB: 0, // use default DB
})
_, err := rdb.Ping(ctx).Result()
if err != nil {
fmt.Println("redis數據庫連接失敗")
} else {
fmt.Println("redis數據庫連接成功...")
}
//1、操作字符串
err1 := rdb.Set(ctx, "username", "snail", 0).Err()
if err1 != nil {
fmt.Println("設置數據失敗")
}
username, _ := rdb.Get(ctx, "username").Result()
fmt.Println(username)
//2、操作列表(list)
rdb.LPush(ctx, "hobby", "喫飯")
rdb.LPush(ctx, "hobby", "睡覺")
rdb.RPush(ctx, "hobby", "寫代碼")
hobby, _ := rdb.LRange(ctx, "hobby", 0, -1).Result()
fmt.Println(hobby)
//3、操作集合(set)
rdb.SAdd(ctx, "hobby", "喫飯", "睡覺", "喫飯")
rdb.SAdd(ctx, "hobby", "寫代碼")
hobby, _ := rdb.SMembers(ctx, "hobby").Result()
fmt.Println(hobby)
//4、Redis 哈希
err3 := rdb.HMSet(ctx, "userinfo", map[string]interface{}{
"username": "Snail",
"age": "20",
}).Err()
if err3 != nil {
fmt.Println(err3)
}
userinfo, _ := rdb.HGetAll(ctx, "userinfo").Result()
fmt.Println(userinfo)
fmt.Println(userinfo["username"])
//5、設置過期時間
rdb.Set(ctx, "age", 20, time.Second*10)
rdb.LPush(ctx, "hobby", "喫飯")
rdb.Expire(ctx, "hobby", time.Second*10)
//6、刪除數據
rdb.Set(ctx, "age", 20, 0)
rdb.Del(ctx, "age")
rdb.LPush(ctx, "hobby", "喫飯")
rdb.FlushAll(ctx)
}
}
3、Pipeline
-
Pipeline主要是一種網絡優化。 -
它本質上意味着客戶端緩衝一堆命令並一次性將它們發送到服務器。
-
這些命令不能保證在事務中執行。
-
這樣做的好處是節省了每個命令的網絡往返時間(RTT)。
二、連接集羣
1、連接 Redis 哨兵模式
func initClient()(err error){
rdb := redis.NewFailoverClient(&redis.FailoverOptions{
MasterName: "master",
SentinelAddrs: []string{"x.x.x.x:26379", "xx.xx.xx.xx:26379", "xxx.xxx.xxx.xxx:26379"},
})
_, err = rdb.Ping().Result()
if err != nil {
return err
}
return nil
}
2、連接 Redis 集羣
func initClient()(err error){
rdb := redis.NewClusterClient(&redis.ClusterOptions{
Addrs: []string{":7000", ":7001", ":7002", ":7003", ":7004", ":7005"},
})
_, err = rdb.Ping().Result()
if err != nil {
return err
}
return nil
}
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/ZhLzTMn3rD430p_k9kLlkw