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.info("Clearing cached URLs, size " + waitForRemove.size());
            Iterator<Map.Entry<ServiceAddressURL, Long>> it = waitForRemove.entrySet().iterator();
            while (it.hasNext()) {
                Map.Entry<ServiceAddressURL, Long> entry = it.next();
                ServiceAddressURL removeURL = entry.getKey();
                long removeTime = entry.getValue();
                long current = System.currentTimeMillis();
                if (current - removeTime >= cacheClearWaitingThresholdInMillis) {
                    URLAddress urlAddress = removeURL.getUrlAddress();
                    URLParam urlParam = removeURL.getUrlParam();
                    if (current - urlAddress.getTimestamp() >= cacheClearWaitingThresholdInMillis) {
                        stringAddress.remove(urlAddress.getRawAddress());
                    }
                    if (current - urlParam.getTimestamp() >= cacheClearWaitingThresholdInMillis) {
                        stringParam.remove(urlParam.getRawParam());
                    }
                    it.remove();
                }
            }
            semaphore.release();
            if (CollectionUtils.isNotEmptyMap(waitForRemove)) {
                
                if (semaphore.tryAcquire()) {
                    cacheRemovalScheduler.schedule(new RemovalTask(), cacheRemovalTaskIntervalInMillis, TimeUnit.MILLISECONDS);
                }
            }
        }
    }
}