private void doNotify( Jedis jedis, Collection<String> keys, URL url, Collection<NotifyListener> listeners) { if (keys == null || keys.size() == 0 || listeners == null || listeners.size() == 0) { return; } long now = System.currentTimeMillis(); List<URL> result = new ArrayList<URL>(); List<String> categories = Arrays.asList(url.getParameter(Constants.CATEGORY_KEY, new String[0])); String consumerService = url.getServiceInterface(); for (String key : keys) { if (!Constants.ANY_VALUE.equals(consumerService)) { String prvoiderService = RedisRegistryUtil.toServiceName(key, root); if (!prvoiderService.equals(consumerService)) { continue; } } String category = RedisRegistryUtil.toCategoryName(key); if (!categories.contains(Constants.ANY_VALUE) && !categories.contains(category)) { continue; } Map<String, String> values = jedis.hgetAll(key); List<URL> urls = RedisRegistryUtil.getUrlsForDoNotify(url, now, values); if (urls.isEmpty()) { urls.add(RedisRegistryUtil.setUrlProperties(url, key, category, root)); } result.addAll(urls); if (logger.isWarnEnabled()) { logger.warn("redis notify: " + key + " = " + urls); } } if (result == null || result.size() == 0) { return; } for (NotifyListener listener : listeners) { notify(url, listener, result); } }