golang 从redis cluster获取所有keys

golang

使用 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
}