主要参考文章:https://www.oryoy.com/news/golang-shi-xian-redis-shu-ju-ku-de-zeng-shan-gai-cha-cao-zuo-xiang-jie-yu-shi-jian-an-li.html
写的比较简单
一、连接数据库
因为启用了gomodule,所以直接import库,然后修正缺乏依赖,就会自动装了
import (
"context"
"fmt"
"github.com/go-redis/redis/v8"
)
func main() {
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password 没设密码就为空
DB: 0, // use default DB
})
pong, err := rdb.Ping(ctx).Result()
if err != nil {
fmt.Println("Error connecting to Redis:", err)
return
}
fmt.Println("Redis connected:", pong)
}
ping查看是否成功
Redis 支持 多个逻辑数据库(默认 16 个,编号从 0 到 15),通过 DB 编号区分。
DB: 0 是 默认数据库,即代码中 Options.DB: 0 指定的数据库。
其中的context
Context 简介
context.Context 是 Go 语言中用于处理请求生命周期的核心接口,主要用于:
控制 请求的取消 / 超时(如设置操作的超时时间)。
传递 请求范围内的元数据(如用户认证信息)。
跨 goroutine 传递 取消信号,避免资源泄漏。
context.Background()
这是一个 空的 Context,作为所有 Context 的 根节点,通常用于 程序入口(如 main 函数)或 没有父 Context 可用的场景。
它 不可取消、没有截止时间、也没有携带任何值,仅作为 Context 链的起点。
二、增删查改
2.0 数据格式
redies一定是key和value,其中key固定为字符串类型。
值(Value) 支持五种基本类型:
字符串(String)
哈希(Hash)
列表(List)
集合(Set)
有序集合(Sorted Set)
所以对于结构体,可以把它:
- 拼接成字符串
- 用哈希hset存储
- 用json字符串
2.1 本身redis
基本是通过get、set、delete方法去实现。
对于修改即update基本上是用set覆盖key的对应键值
简单的学生管理系统代码:
// 学生信息管理
var ctx = context.Background()
type Student struct {
ID string
Name string
Age int
}
func addStudent(rdb *redis.Client, student Student) {
key := "student:" + student.ID
value := fmt.Sprintf("%s:%d", student.Name, student.Age)
err := rdb.Set(ctx, key, value, 0).Err()
if err != nil {
fmt.Println("添加学生失败:", err)
return
}
fmt.Println("添加学生成功")
}
func getStudent(rdb *redis.Client, studentID string) {
key := "student:" + studentID
value, err := rdb.Get(ctx, key).Result()
if err != nil {
fmt.Println("获取失败", err)
return
}
fmt.Println("获取学生信息成功:", studentID, "值:", value)
}
func updateStudent(rdb *redis.Client, student Student) {
key := "student:" + student.ID
value := fmt.Sprintf("%s:%d", student.Name, student.Age)
err := rdb.Set(ctx, key, value, 0).Err()
if err != nil {
fmt.Println("更新学生信息失败:", err)
return
}
fmt.Println("更新学生信息成功")
}
func deleteStudent(rdb *redis.Client, studentID string) {
key := "student:" + studentID
err := rdb.Del(ctx, key).Err()
if err != nil {
fmt.Println("删除学生信息失败:", err)
return
}
fmt.Println("删除学生信息成功:", studentID)
}
func main() {
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password
DB: 0, // use default D
})
student := Student{ID: "2", Name: "bob", Age: 30}
addStudent(rdb, student)
getStudent(rdb, "1")
updateStudent(rdb, Student{ID: "1", Name: "Alice", Age: 25})
getStudent(rdb, "1")
}
浙公网安备 33010602011771号