我有一个问题,我的 Redis 键 SCAN(带有通配符)似乎没有始终如一地返回所有值。它可以正常工作很多次,但并非总是如此。也许我不明白扫描应该如何工作。我正在使用 redigo 作为我的库。
与通配符匹配的模式:
- “event.query.zt2qXIVY80fCTbmWf3sbC5QaoTg2*”
Redis 中的键:
- event.query.zt2qXIVY80fCTbmWf3sbC5QaoTg2?DateRange2019-04-12-2019-04-17
- event.query.zt2qXIVY80fCTbmWf3sbC5QaoTg2?DateRange2019-04-13-2019-04-13
- event.query.zt2qXIVY80fCTbmWf3sbC5QaoTg2?DateRange2019-04-08-2019-04-14
- event.query.zt2qXIVY80fCTbmWf3sbC5QaoTg2?DateRange2019-04-12-2019-04-12
我基本上是在寻找该 GUID 中的任何键,但匹配似乎不一致。这是我用来进行模式匹配的代码。
//GetKeysFromPattern - The endpoint to retrieve a list of keys that match a pattern
func GetKeysFromPattern(pattern string) ([]string, error) {
tempConn := pool.Get()
defer tempConn.Close()
if tempConn.Err() == nil {
iter := 0
keys := []string{}
for {
arr, err := redis.Values(tempConn.Do("SCAN", iter, "MATCH", pattern))
if err != nil {
return keys, fmt.Errorf("error retrieving '%s' keys", pattern)
}
iter, _ = redis.Int(arr[0], nil)
k, _ := redis.Strings(arr[1], nil)
keys = append(keys, k...)
if iter == 0 {
break
}
}
return keys, nil
}
return nil, sharedstructs.InternalServerError{Msg: "No Connection To Redis So Returning nil"}
}