Redis Key Scan не всегда возвращает все значения - PullRequest
0 голосов
/ 12 апреля 2019

У меня проблема, из-за которой мой ключ сканирования 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"}
}
...