将哈希字段扫描到结构体

返回多个键值对的命令提供了一个帮助程序来将结果扫描到结构体中,例如,HGetAllHMGetMGet 等命令。

您可以使用 redis 结构体字段标签来更改字段名称或完全忽略某些字段

type Model struct {
	Str1    string   `redis:"str1"`
	Str2    string   `redis:"str2"`
	Int     int      `redis:"int"`
	Bool    bool     `redis:"bool"`
	Ignored struct{} `redis:"-"`
}

由于 go-redis 没有提供将结构体保存到 Redis 的帮助程序,因此我们使用管道将一些数据加载到数据库中

rdb := redis.NewClient(&redis.Options{
	Addr: ":6379",
})

if _, err := rdb.Pipelined(ctx, func(rdb redis.Pipeliner) error {
	rdb.HSet(ctx, "key", "str1", "hello")
	rdb.HSet(ctx, "key", "str2", "world")
	rdb.HSet(ctx, "key", "int", 123)
	rdb.HSet(ctx, "key", "bool", 1)
	return nil
}); err != nil {
	panic(err)
}

之后,我们就可以使用 HGetAll 扫描数据了

var model1 Model
// Scan all fields into the model.
if err := rdb.HGetAll(ctx, "key").Scan(&model1); err != nil {
	panic(err)
}

HMGet

var model2 Model
// Scan a subset of the fields.
if err := rdb.HMGet(ctx, "key", "str1", "int").Scan(&model2); err != nil {
	panic(err)
}

您也可以在 GitHub在新窗口中打开 中找到上面的示例。

您也可以将结构体字段的值写入 redis,例如 MSetHSet 命令

if err := rdb.HSet(ctx, "key", model1).Err(); err != nil {
	panic(err)
}