一、导入包
"github.com/go-redis/redis/v8" //版本可以更改的
二、初始化链接
var (
rdb *redis.Client
)
// 初始化连接
func initClient() (err error) {
rdb = redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password set
DB: 0, // use default DB
PoolSize: 100, // 连接池大小
})
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
_, err = rdb.Ping(ctx).Result()
return err
}
三、相关增删查改操作
优先初始化
ctx := context.Background()
err:=initClient()
if err!=nil{
panic(err)
return
}
1、get和set的用法
(1)set
err=rdb.Set(ctx,"name","Go",0).Err()
if err!=nil{
panic(err)
return
}
(2)get
val2, err := rdb.Get(ctx, "name").Result()
if err == redis.Nil {
fmt.Println("name does not exist")
} else if err != nil {
panic(err)
} else {
fmt.Println("name=", val2)
}
2、zset用法
func TestZset(){
err:=initClient()
if err != nil {
fmt.Printf("initClient(), err:%v\n", err)
return
}
ctx := context.Background()
zsetkey:="lang_rank"
languages := []*redis.Z{
&redis.Z{Score: 90.0, Member: "Golang"},
&redis.Z{Score: 98.0, Member: "Java"},
&redis.Z{Score: 95.0, Member: "Python"},
&redis.Z{Score: 97.0, Member: "JavaScript"},
&redis.Z{Score: 99.0, Member: "C/C++"},
}
num,err:=rdb.ZAdd(ctx,zsetkey,languages...).Result()
if err != nil {
fmt.Printf("zadd failed, err:%v\n", err)
return
}
fmt.Printf("zadd %d success.\n", num)
// 把Golang的分数加10
newScore, err := rdb.ZIncrBy(ctx,zsetkey, 10.0, "Golang").Result()
if err != nil {
fmt.Printf("zincrby failed, err:%v\n", err)
return
}
fmt.Printf("Golang's score is %f now.\n", newScore)
// 取分数最高的3个
ret, err := rdb.ZRevRangeWithScores(ctx,zsetkey, 0, 2).Result()
if err != nil {
fmt.Printf("zrevrange failed, err:%v\n", err)
return
}
for _, z := range ret {
fmt.Println(z.Member, z.Score)
}
// 取95~100分的
op := redis.ZRangeBy{
Min: "95",
Max: "100",
}
ret, err = rdb.ZRangeByScoreWithScores(ctx,zsetkey, &op).Result()
if err != nil {
fmt.Printf("zrangebyscore failed, err:%v\n", err)
return
}
for _, z := range ret {
fmt.Println(z.Member, z.Score)
}
}
3、根据前缀获取key
vals, err := rdb.Keys(ctx, "prefix*").Result()
4、执行自定义命令
res, err := rdb.Do(ctx, "set", "key", "value").Result()
4、Pipeline
pipe := rdb.Pipeline()
incr := pipe.Incr("pipeline_counter")
pipe.Expire("pipeline_counter", time.Hour)
_, err := pipe.Exec()
fmt.Println(incr.Val(), err)
如果看完对自己有所帮助,请点赞支持