public Object retrieve(String key) {
		if(key == null) {
			return null;
		}

		totalAccess++;
		if(entryMap.containsKey(key)) {
			RREntry entry = entryMap.get(key);
			hitCount++;
			if(debug) System.out.println("Hit cache entry: " + key);
			return entry.value;
		} else if(refresherMap.containsKey(key)) {
			RREntry newEntry = new RREntry(key, refresherMap.get(key));
			if(size > 0) {
				int idx = -1;
				if(entryMap.size() < size) {
					idx = entryMap.size();
				} else {
					Random random = new Random();
					idx = random.nextInt(size);
					entryMap.remove(keyArr[idx]);
				}
				keyArr[idx] = key;
				entryMap.put(key, newEntry);
			}
			
			if(debug) System.out.println("New cache entry: " + key);
			return newEntry.value;
		} else {
			if(debug) System.out.println("Please provide according refresher to initilize key!");
			return null;
		}
	}