0

我有一个问题,我的 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"}
}
4

0 回答 0