https://github.com/apache/dubbo/pull/7476/files#diff-b00639ea715ae8698865e33943cacc6a08ba0985e78980b8b74c085e4b12188bR165-R168
This pull request wants to delete stringUrls cache when the provider is empty or unsubscribe is called. but forgot to check path `/providers` in the first case, cause stringUrls was cleared every time when providers change. And this pull request also forgot to clear stringAddress and stringParam cache.
![image](https://user-images.githubusercontent.com/31196226/112958807-66649100-9175-11eb-9c57-3134a8fe8ec1.png)

if (keys == null || keys.length == 0) {
            return rawProvider;
        }
        for (String key : keys) {
            int idxStart = rawProvider.indexOf(key);
            if (idxStart == -1) {
                continue;
            }
            int idxEnd = rawProvider.indexOf(ENCODED_AND_MARK, idxStart);
            String part1 = rawProvider.substring(0, idxStart);
            if (idxEnd == -1) {
                rawProvider = part1;
            } else {
                String part2 = rawProvider.substring(idxEnd + ENCODED_AND_MARK.length());
                rawProvider = part1 + part2;
            }
        }
        if (rawProvider.endsWith(ENCODED_AND_MARK)) {
            rawProvider = rawProvider.substring(0, rawProvider.length() - ENCODED_AND_MARK.length());
        }
        if (rawProvider.endsWith(ENCODED_QUESTION_MARK)) {
            rawProvider = rawProvider.substring(0, rawProvider.length() - ENCODED_QUESTION_MARK.length());
        }
        return rawProvider;
    }
    private List<URL> toConfiguratorsWithoutEmpty(URL consumer, Collection<String> configurators) {
        List<URL> urls = new ArrayList<>();
        if (CollectionUtils.isNotEmpty(configurators)) {
            for (String provider : configurators) {
                if (provider.contains(PROTOCOL_SEPARATOR_ENCODED)) {