golang 从redis cluster获取所有keys
使用 ForEachMaster 即可,如果从Slave获取有可能会有重复的需要另外去重。
go
func GetKeysWithPrefixForCluster(rdb redis.ClusterClient, ctx context.Context, prefix string) (keys []string, err error) {
// 从所有主节点中依次获取
err = rdb.ForEachMaster(ctx, func(ctx context.Context, shard *redis.Client) (err error) {
thisKeys, err := shard.Keys(ctx, prefix+"*").Result()
if err != nil {
return err
}
keys = append(keys, thisKeys...)
return nil
})
if err != nil {
log.Println("GetKeysWithPrefixForCluster err:", err)
return keys, nil
}
//keys=unique(keys)
return keys, nil
}
去重复
go
func unique(slice []string) []string {
keysMap := make(map[string]bool)
var uniqueKeys []string
for _, entry := range slice {
if _, value := keysMap[entry]; !value {
keysMap[entry] = true
uniqueKeys = append(uniqueKeys, entry)
}
}
return uniqueKeys
}