private CacheResult compareVersionKey(CacheDefinition cacheDefinition, CacheResult cacheResult,
			CacheObject oldItem, Object[] args) {
		long itemVersion = oldItem.getVersion();
		Object cachedItem = oldItem.getCacheObject();

		Object[] params;
		boolean isReturnCollection = cacheDefinition.isReturnCollection();
		// 通过判断缓存的是单个对象还是集合，然后根据@Cache的vkey值来生成对应的版本Key值：
		// 1、集合通过方法传入中的@Param对应的值来生成；
		// 2、如果是单个集合通过"result"关键字来生成版本号。
		if (isReturnCollection) {
			params = args;
		} else {// 单个对象
			// 缓存对象为空或者不需要判断versionKey就作为命中处理
			if (cachedItem == null || StringUtils.isEmpty(cacheDefinition.getVkey())) {
				return processCacheHit(cacheResult, cachedItem, args);
			}
			// 因为将单个对象关联vkey时就好像在返回接口上加了一个@Param("result")
			// 所以需要获取单个对象的版本key时需要获取缓存的对象，并将对象作为生成版本key的参数来使用
			params = new Object[] { cachedItem };
		}

		String versionKey = cacheDefinition.generateVersionKey(params);
		if (StringUtils.isEmpty(versionKey)) {
			LOGGER.debug("无法生成更新版本信息的缓存Key,获取缓存失败");
			return cacheResult;
		}
		if (LOGGER.isDebugEnabled()) {
			LOGGER.debug("生成版本信息的缓存Key[" + versionKey + "]");
		}
		cacheResult.setVersionKey(versionKey);

		Cache cache = cacheResult.getCache();
		// 根据版本的key值，获取当前版本的值
		long currentVersion = getCurrentVersion(cache, versionKey);
		cacheResult.setCurrentVersion(currentVersion);

		// 如果当前版本值，和缓存中设置的值一致，说明这段时间没有更新，缓存有效。
		if (currentVersion != 0 && currentVersion == itemVersion) {
			return processCacheHit(cacheResult, cachedItem, args);
		} else {
			if (LOGGER.isDebugEnabled()) {
				LOGGER.debug("当前版本为[" + currentVersion + "],缓存对象版本号为[" + itemVersion + "],Cache没有命中,直接调用DAO方法");
			}
			return cacheResult;
		}
	}