Installation
go-redis supports 2 last Go versions and requires a Go version with modules support. So make sure to initialize a Go module:
go mod init github.com/my/repo
安装redis库
go get github.com/go-redis/redis/v8
Quickstart
package main
import (
"context"
"fmt"
"github.com/go-redis/redis/v8"
)
//Background返回一个非空的Context。 它永远不会被取消,没有值,也没有期限。
//它通常在main函数,初始化和测试时使用,并用作传入请求的顶级上下文。
var ctx = context.Background()
func main() {
rdb := redis.NewClient(&redis.Options{
Addr: "49.234.35.128:6379",
Password: "",
DB: 0,
})
//设置key-value
err := rdb.Set(ctx, "key", "value", 0).Err()
if err != nil {
panic(err)
}
//获取key对应的value
val, err := rdb.Get(ctx, "key").Result()
if err != nil {
panic(err)
}
fmt.Println("key", val)
//获取一个不存在的key及其逻辑处理
val2, err := rdb.Get(ctx, "key2").Result()
if err == redis.Nil {
fmt.Println("key2 does not exist")
} else if err != nil {
panic(err)
} else {
fmt.Println("key2", val2)
}
// Output: key value
// key2 does not exist
}
其他设置操作
设置超时时间
通过
SetNX
设置key的同时设置过期时间 ,NX:当key值存在时设置失败,set返回false
package main
import (
"context"
"time"
"github.com/go-redis/redis/v8"
)
var ctx = context.Background()
func main() {
rdb := redis.NewClient(&redis.Options{
Addr: "49.234.35.128:6379",
Password: "",
DB: 0,
})
//设置key的超时时间,NX:当key值存在时设置失败,set返回false
set, err := rdb.SetNX(ctx, "key", "value", 10*time.Second).Result()
if err != nil {
println("set error:", err)
}
print("set:", set)
}
补充:
set, err := rdb.SetNX(ctx, "key", "value", redis.KeepTTL).Result()
if err != nil {
println("set error:", err, ",", redis.KeepTTL)
}
KeepTTL is a Redis KEEPTTL option to keep existing TTL, it requires your redis-server version >= 6.0, otherwise you will receive an error:
执行redis命令
package main
import (
"context"
"fmt"
"github.com/go-redis/redis/v8"
)
var ctx = context.Background()
func main() {
rdb := redis.NewClient(&redis.Options{
Addr: "49.234.35.128:6379",
Password: "",
DB: 0,
})
//创建函数
Get := func(ctx context.Context, rdb *redis.Client, key string) *redis.StringCmd {
cmd := redis.NewStringCmd(ctx, "get", key)
rdb.Process(ctx, cmd)
return cmd
}
//调用函数获取value值
v, err := Get(ctx, rdb, "key").Result()
if err != nil {
fmt.Println(err)
}
fmt.Printf("value:%q", v)
}
执行get命令
var ctx = context.Background()
func main() {
rdb := redis.NewClient(&redis.Options{
Addr: "49.234.35.128:6379",
Password: "",
DB: 0,
})
v, err := rdb.Do(ctx, "get", "key").Text()
if err != nil {
println(err.Error())
}
fmt.Printf("value:%q", v)
}
SetEX
package main
import (
"context"
"time"
"github.com/go-redis/redis/v8"
)
var ctx = context.Background()
func main() {
rdb := redis.NewClient(&redis.Options{
Addr: "49.234.35.128:6379",
Password: "",
DB: 0,
})
err := rdb.SetEX(ctx, "key", "value", 5*time.Second).Err()
if err != nil {
panic(err)
}
}
ex 设置键的过期时间为 second 秒。NX :只在键不存在时,才对键进行设置操作。
参考
https://pkg.go.dev/github.com/go-redis/redis/v8#readme-installation