将哈希字段扫描到结构体
返回多个键值对的命令提供了一个帮助程序来将结果扫描到结构体中,例如,HGetAll
、HMGet
和 MGet
等命令。
您可以使用 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,例如 MSet
和 HSet
命令
if err := rdb.HSet(ctx, "key", model1).Err(); err != nil {
panic(err)
}