Go操作Redis
安装第三方Redis库--为了操作redis的api
- 设置go.mod文件
- 先安装Git
- 在终端上输入go get github.com/go-redis/redis/v8
golang对于String操作
package main
import (
"context"
"fmt"
"time"
"github.com/go-redis/redis/v8"
)
func main() {
// 初始化 Redis 客户端
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379", // Redis 服务器地址
Password: "", // 密码,没有则留空
DB: 0, // 默认数据库
})
defer rdb.Close() // 程序退出时关闭连接
// 创建上下文(默认超时 5 秒)
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
//cancel()会向所有派生自该 ctx的操作发送取消信号,并释放相关资源
//延时关闭
defer cancel()
// 1. 设置键值(最后一个参数是设置有效时间,0表示永不过期)
if err := rdb.Set(ctx, "name", "Alice", 0).Err(); err != nil {
panic(fmt.Sprintf("设置 name 失败: %v", err))
}
// 2. 设置带过期时间的键值(10分钟后过期)
if err := rdb.Set(ctx, "token", "abc123", 10*time.Minute).Err(); err != nil {
panic(fmt.Sprintf("设置 token 失败: %v", err))
}
// 3. 获取值
val, err := rdb.Get(ctx, "name").Result()
switch {
case err == redis.Nil:
fmt.Println("Key 'name' 不存在")
case err != nil:
panic(fmt.Sprintf("获取 name 失败: %v", err))
default:
fmt.Println("name:", val) // 输出: name: Alice
}
// 4. 删除键
if _, err := rdb.Del(ctx, "name").Result(); err != nil {
panic(fmt.Sprintf("删除 name 失败: %v", err))
}
fmt.Println("已删除 key 'name'")
// 5. 验证删除(应返回 Key 不存在)
_, err = rdb.Get(ctx, "name").Result()
if err == redis.Nil {
fmt.Println("验证: Key 'name' 已不存在")
}
}
.Err()返回error,使用场景:只需要知道操作是否成功
.Result()返回(具体类型, error),使用场景:需要获取操作返回的具体数据
golang对于Hash操作
其实就是改一下操作
比如:
if err := rdb.Set(ctx, "name", "Alice", 0).Err(); err != nil
改成
if err := rdb.HSet(ctx, "myHash","name", "Alice").Err(); err != nil
当然不知要把Set改成HSet,还要注意函数的参数变化