# #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. Вы справились! Я думал, что мои узлы совместно используют хранилище данных, и как только я вошел в систему, стало ясно, что это не так. Мне нужно будет выяснить, как правильно его настроить.