如何使用redigo将地图保存和检索到redis?
我有一张这样的地图,我想用redigo从redis保存/检索它:如何使用redigo将地图保存和检索到redis?,go,redis,redigo,Go,Redis,Redigo,我有一张这样的地图,我想用redigo从redis保存/检索它: animals := map[string]bool{ "cat": true, "dog": false, "fox": true, } 地图的长度可能会有所不同 我尝试了以下功能: func SetHash(key string, value map[string]bool) error { conn := Pool.Get() defer conn.Close() _,
animals := map[string]bool{
"cat": true,
"dog": false,
"fox": true,
}
地图的长度可能会有所不同
我尝试了以下功能:
func SetHash(key string, value map[string]bool) error {
conn := Pool.Get()
defer conn.Close()
_, err := conn.Do("HMSET", key, value)
if err != nil {
return fmt.Errorf("error setting key %s to %s: %v", key, value, err)
}
return err
}
func GetHash(key string) (map[string]bool, error) {
conn := Pool.Get()
defer conn.Close()
val, err := conn.Do("HGETALL", key)
if err != nil {
fmt.Errorf("error setting key %s to %s: %v", key, nil, err)
return nil, err
}
return val, err
}
但无法正确地生成
GetHash
。我已经检查了示例,但没有任何帮助。因此,感谢您的帮助,让我们有一个工作的例子 应用程序负责将结构化类型与Redis理解的类型进行转换
将映射展平为参数列表:
func SetHash(key string, value map[string]bool) error {
conn := Pool.Get()
defer conn.Close()
// Create arguments: key field value [field value]...
var args = []interface{}{key}
for k, v := range value {
args = append(args, k, v)
}
_, err := conn.Do("HMSET", args...)
if err != nil {
return fmt.Errorf("error setting key %s to %v: %v", key, value, err)
}
return err
}
将返回的字段值对转换为映射:
func GetHash(key string) (map[string]bool, error) {
conn := Pool.Get()
defer conn.Close()
values, err := redis.Strings(conn.Do("HGETALL", key))
if err != nil {
return nil, err
}
// Loop through [field value]... and parse value as bool.
m := map[string]bool{}
for i := 0; i < len(values); i += 2 {
b, err := strconv.ParseBool(value)
if err != nil {
return nil, errors.New("value not a bool")
}
m[key] = b
}
return m, nil
}
func GetHash(键字符串)(map[string]bool,错误){
conn:=Pool.Get()
延迟连接关闭()
值,err:=redis.Strings(conn.Do(“HGETALL”,key))
如果错误!=零{
返回零,错误
}
//循环通过[field value]…并将值解析为bool。
m:=map[string]bool{}
对于i:=0;i
HMSET
已被弃用,请改用HSET
,但此处无效
对于SetHash()
,可以使用AddFlat()
展平map[string]bool
对于GetHash()
,请使用Values()
。您可以使用ScanStruct()
映射到结构,或通过值循环动态创建映射
v, err := redis.Values(c.Do("HGETALL", key))
redis.ScanStruct(v, &myStruct);
请参阅中的redigo测试示例。谢谢您的提示。请告诉我如何将密钥的超时设置为
SetHash
?使用conn.Do(“EXPIRE”,key,secs)
。看见你最好是:
v, err := redis.Values(c.Do("HGETALL", key))
redis.ScanStruct(v, &myStruct);