【golang长途旅行第36站】golang操作Redis
Go操作Redis
安装第三方Redis库–为了操作redis的api
- 设置go.mod文件
- 先安装Git
- 在终端上输入go get github.com/go-redis/redis/v8
学习文档:https://redis.uptrace.dev/zh/(官方中文版)
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,还要注意函数的参数变化