2 回答

TA貢獻1828條經驗 獲得超6個贊
HMSET
已棄用,請HSET
改用,但在這里沒有效果。
map[string]bool
可以用forAddFlat()
展平SetHash()
。
c.Do("HSET", redis.Args{}.Add("key").AddFlat(value)...)
對于GetHash()
,使用Values()
。您可以使用ScanStruct()
映射到結構或遍歷值以動態創建映射。
v, err := redis.Values(c.Do("HGETALL", key)) redis.ScanStruct(v, &myStruct);
請參閱 scan_test.go 中redigo測試的示例。

TA貢獻1887條經驗 獲得超5個贊
應用程序負責將結構化類型與 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
}
- 2 回答
- 0 關注
- 200 瀏覽
添加回答
舉報