private boolean checkCacheDelayAndUpdate(final ConfigDataCache serverCache, final String clientMd5, final long clientModifyTime) {
        // is the same, doesn't need to be updated
        if (StringUtils.equals(clientMd5, serverCache.getMd5())) {
            return false;
        }
        // if the md5 value is different, it is necessary to compare lastModifyTime.
        long lastModifyTime = serverCache.getLastModifyTime();
        if (lastModifyTime >= clientModifyTime) {
            // the client's config is out of date.
            return true;
        }
        // the lastModifyTime before client, then the local cache needs to be updated.
        // Considering the concurrency problem, admin must lock,
        // otherwise it may cause the request from shenyu-web to update the cache concurrently, causing excessive db pressure

        String configDataCacheKey = buildCacheKey(serverCache.getNamespaceId(), serverCache.getGroup());

        ConfigDataCache latest = CACHE.get(configDataCacheKey);
        if (latest != serverCache) {
            return !StringUtils.equals(clientMd5, latest.getMd5());
        }
        synchronized (this) {
            latest = CACHE.get(configDataCacheKey);
            if (latest != serverCache) {
                return !StringUtils.equals(clientMd5, latest.getMd5());
            }
            super.refreshLocalCache();
            latest = CACHE.get(configDataCacheKey);
            return !StringUtils.equals(clientMd5, latest.getMd5());
        }
    }
check whether the client needs to update the cache.

@param serverCache      the admin local cache
@param clientMd5        the client md5 value
@param clientModifyTime the client last modify time
@return true: the client needs to be updated, false: not need.
shenyu-admin/src/main/java/org/apache/shenyu/admin/listener/http/HttpLongPollingDataChangedListener.java