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)

logger.warn("Failed to evict url for " + consumer, e);
        }
        return new ArrayList<>(newURLs.values());
    }
    protected List<URL> toUrlsWithEmpty(URL consumer, String path, Collection<String> providers) {
        List<URL> urls;
        if (CollectionUtils.isEmpty(providers)) {
            urls = new ArrayList<>(1);
        } else {
            String rawProvider = providers.iterator().next();
            if (rawProvider.startsWith(OVERRIDE_PROTOCOL) || rawProvider.startsWith(ROUTE_PROTOCOL) || rawProvider.startsWith(ROUTE_SCRIPT_PROTOCOL)) {
                urls = toConfiguratorsWithoutEmpty(consumer, providers);
            } else {
                urls = toUrlsWithoutEmpty(consumer, providers);
            }
        }
        if (urls.isEmpty()) {
            int i = path.lastIndexOf(PATH_SEPARATOR);
            String category = i < 0 ? path : path.substring(i + 1);
            URL empty = URLBuilder.from(consumer)
                    .setProtocol(EMPTY_PROTOCOL)
                    .addParameter(CATEGORY_KEY, category)
                    .build();
            urls.add(empty);
        }
        return urls;
    }
    protected ServiceAddressURL createURL(String rawProvider, URL consumerURL, Map<String, String> extraParameters) {
        boolean encoded = true;