在 Go 语言中使用 Redis 主要通过 Redis 客户端库进行操作。最常用的 Redis 客户端库是 go-redis。
以下是一个简单的 Go 脚本,展示了如何连接 Redis 服务器并进行增、删、改、查等操作。
1. 安装 go-redis
库
首先,在项目中安装 go-redis
库:
go get github.com/go-redis/redis/v8
2. 导入 Redis 包
在 Go 脚本中导入所需的包:
import (
"context"
"fmt"
"log"
"github.com/go-redis/redis/v8"
)
3. 创建 Redis 客户端和连接
使用 redis.NewClient()
来创建 Redis 客户端,并通过它连接到 Redis 服务器。
var ctx = context.Background()
// 创建 Redis 客户端
client := redis.NewClient(&redis.Options{
Addr: "localhost:6379", // Redis 地址,默认是 localhost:6379
Password: "", // Redis 密码,如果没有可以为空
DB: 0, // 使用的数据库,默认是 DB 0
})
4. 基本的增、删、改、查操作
4.1 设置键值对(增)
通过 Set
方法设置一个键值对。
err := client.Set(ctx, "key", "value", 0).Err() // 0 表示没有过期时间
if err != nil {
log.Fatalf("could not set key: %v", err)
}
fmt.Println("Key set successfully")
4.2 获取键值(查)
通过 Get
方法获取键对应的值。
val, err := client.Get(ctx, "key").Result()
if err != nil {
log.Fatalf("could not get key: %v", err)
}
fmt.Printf("Value for key: %s\n", val)
4.3 删除键(删)
通过 Del
方法删除一个或多个键。
err := client.Del(ctx, "key").Err()
if err != nil {
log.Fatalf("could not delete key: %v", err)
}
fmt.Println("Key deleted successfully")
4.4 更新键值(改)
Redis 不直接提供 "更新" 操作,因为通过 Set
方法覆盖原有的值即可。
err := client.Set(ctx, "key", "new_value", 0).Err() // 覆盖原有的值
if err != nil {
log.Fatalf("could not update key: %v", err)
}
fmt.Println("Key updated successfully")
4.5 键是否存在(检查)
通过 Exists
方法检查一个或多个键是否存在。
exists, err := client.Exists(ctx, "key").Result()
if err != nil {
log.Fatalf("could not check if key exists: %v", err)
}
if exists == 1 {
fmt.Println("Key exists")
} else {
fmt.Println("Key does not exist")
}
4.6 设置键的过期时间
可以通过 Expire
方法为键设置过期时间,单位是秒。
err := client.Expire(ctx, "key", 60).Err() // 设置 60 秒后过期
if err != nil {
log.Fatalf("could not set expiration: %v", err)
}
fmt.Println("Expiration set successfully")
5. 完整示例代码
package main
import (
"context"
"fmt"
"log"
"github.com/go-redis/redis/v8"
)
var ctx = context.Background()
func main() {
// 创建 Redis 客户端
client := redis.NewClient(&redis.Options{
Addr: "localhost:6379", // Redis 地址
Password: "", // 密码
DB: 0, // 默认数据库
})
// 设置键值
err := client.Set(ctx, "key", "value", 0).Err()
if err != nil {
log.Fatalf("could not set key: %v", err)
}
fmt.Println("Key set successfully")
// 获取键值
val, err := client.Get(ctx, "key").Result()
if err != nil {
log.Fatalf("could not get key: %v", err)
}
fmt.Printf("Value for key: %s\n", val)
// 删除键
err = client.Del(ctx, "key").Err()
if err != nil {
log.Fatalf("could not delete key: %v", err)
}
fmt.Println("Key deleted successfully")
// 更新键值
err = client.Set(ctx, "key", "new_value", 0).Err()
if err != nil {
log.Fatalf("could not update key: %v", err)
}
fmt.Println("Key updated successfully")
// 检查键是否存在
exists, err := client.Exists(ctx, "key").Result()
if err != nil {
log.Fatalf("could not check if key exists: %v", err)
}
if exists == 1 {
fmt.Println("Key exists")
} else {
fmt.Println("Key does not exist")
}
// 设置键的过期时间
err = client.Expire(ctx, "key", 60).Err()
if err != nil {
log.Fatalf("could not set expiration: %v", err)
}
fmt.Println("Expiration set successfully")
}
6. 运行代码
确保 Redis 服务正在运行,默认端口为 6379
,然后通过以下命令运行 Go 程序:
go run main.go
7. 其他操作
列表操作(List):
LPush
:在列表的左侧推送元素。RPush
:在列表的右侧推送元素。LPop
:从列表的左侧弹出元素。RPop
:从列表的右侧弹出元素。
哈希操作(Hash):
HSet
:设置哈希表中的字段。HGet
:获取哈希表中指定字段的值。HDel
:删除哈希表中的字段。
集合操作(Set):
SAdd
:将元素添加到集合中。SMembers
:获取集合中的所有成员。
有序集合操作(Sorted Set):
ZAdd
:添加元素到有序集合中。ZRange
:获取有序集合中的元素。
这些是 Go 语言与 Redis 的基本操作,利用 go-redis
库可以非常方便地实现 Redis 操作。