go-redis 缓存结构化的对象

胡俊美
2023-12-01

Go语言第三方 redis
github.com/go-redis/redis

go-redis库的使用

package main

import (
	"context"
	"fmt"
	"github.com/go-redis/redis/v8"
	"log"
)

func ConnectRedis() *redis.Client{
	client := redis.NewClient(&redis.Options{
		Addr:     "192.168.4.240:6379",
		Password: "",
		DB:       0,
	})
	_, err := client.Ping(context.Background()).Result()
	if err != nil {
		log.Fatalln("请配置redis服务")
	}
	return client
}

type User struct {
	Name string `redis:"name"`
	Age  int    `redis:"age"`
	Sex  string `redis:"sex"`
}

// 在 redis 中存取结构化的数据只能使用 hash 类型
func main(){
	conn := ConnectRedis()

	//1、 以 map[string]interface{} 格式存取结构化对象
	datas := map[string]interface{}{
		"name":"张三",
		"sex":"男",
		"age":19,
		"tel":12356789,
	}

	// 添加
	conn.HMSet(context.Background(),"data",datas)
	
	// 删除 data 这个 key 映射的数据
	conn.Del(context.Background(),"data")
	
	// 取出
	result, _ := conn.HGetAll(context.Background(), "data").Result()
	fmt.Println(result) // 输出 : map[age:19 name:张三 sex:1 tel:12356789]
	fmt.Println(result["name"]) // 输出: 张三
	fmt.Println(result["sex"]) // 输出: 男

	//2、以结构体方式存取结构化对象
	
	// 为 key 添加过期时间
	conn.Expire(context.Background(),"user",5 * time.Minute)
	
	// 添加 (key 相同,为每一个结构体字段赋值)
	conn.HMSet(context.Background(),"user","name","李四")
	conn.HMSet(context.Background(),"user","age",20)
	conn.HMSet(context.Background(),"user","sex","男")

	// 删除 整个 user 对象
	conn.Del(context.Background(),"user")

	// 取出
	var obj User
	conn.HGetAll(context.Background(), "user").Scan(&obj)
	fmt.Println(obj) // 输出: {李四 20 男}
}
 类似资料: