Redis密钥扫描并不总是返回所有值

时间:2019-04-12 19:40:35

标签: go redis google-kubernetes-engine redigo

我遇到一个问题,即我的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"}
}

0 个答案:

没有答案