Сканирование клавиш Redis не всегда возвращает все значения

# #go #redis #google-kubernetes-engine #redigo

#Вперед #redis #google-kubernetes-engine #redigo

Вопрос:

У меня проблема, из-за которой мое сканирование ключа Redis (с подстановочным знаком), похоже, последовательно не возвращает все значения. Он работает корректно много раз, но не всегда. Возможно, я не понимаю, как должно работать сканирование. Я использую redigo в качестве своей библиотеки.

Шаблон для сопоставления с подстановочным знаком:

  • «событие.запрос.zt2qXIVY80fCTbmWf3sbC5QaoTg2 *»

Ключи в Redis:

  • событие.запрос.zt2qXIVY80fCTbmWf3sbC5QaoTg2?Дата2019-04-12-2019-04-17
  • событие.запрос.zt2qXIVY80fCTbmWf3sbC5QaoTg2?Дата2019-04-13-2019-04-13
  • событие.запрос.zt2qXIVY80fCTbmWf3sbC5QaoTg2?Дата2019-04-08-2019-04-14
  • событие.запрос.zt2qXIVY80fCTbmWf3sbC5QaoTg2?Дата2019-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"}
}
  

Комментарии:

1. Можете ли вы проверить (и добавить к вопросу), остается ли пространство ключей redis неизменным для двух разных запусков вашей программы, где вы видите разные результаты?

2. Вы справились! Я думал, что мои узлы совместно используют хранилище данных, и как только я вошел в систему, стало ясно, что это не так. Мне нужно будет выяснить, как правильно его настроить.