У меня проблема, из-за которой мой ключ сканирования Redis (с подстановочным знаком) не всегда возвращает все значения. Он работает правильно много раз, но не все время. Может быть, я не понимаю, как должно работать сканирование. Я использую 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"}
}