@Override
    @SuppressWarnings("unchecked")
    public <T> void get(String cacheKey, Class<T> type, IAsyncResultHandler<T> handler) {
        boolean expired = false;
        Object rval;
        synchronized (mapMutex) {
            rval = objectCache.get(cacheKey);
            if (rval != null) {
                Long expiresOn = expireOnMap.get(cacheKey);
                if (System.currentTimeMillis() > expiresOn ) {
                    expired = true;
                }
            }
        }
        if (expired) {
            synchronized (cacheSizeMutex) {
                synchronized (mapMutex) {
                    objectCache.remove(cacheKey);
                    expireOnMap.remove(cacheKey);
                    IApimanBuffer buffer = dataCache.remove(cacheKey);
                    if (buffer != null) {
                        cacheSize -= buffer.length();
                    }
                }
            }
            rval = null;
        }
        handler.handle(AsyncResultImpl.create((T) rval));
    }
@see io.apiman.gateway.engine.components.ICacheStoreComponent#get(java.lang.String, java.lang.Class, io.apiman.gateway.engine.async.IAsyncResultHandler)
gateway/engine/core/src/main/java/io/apiman/gateway/engine/impl/InMemoryCacheStoreComponent.java