@Override
    protected Cancellable bulkRestore(final Collection<String> storageKeys, final FutureCallback<Map<String, byte[]>> callback) {
        final BulkFuture<Map<String, Object>> future = client.asyncGetBulk(storageKeys);
        future.addListener(future1 -> {
            final Map<String, ?> storageObjectMap = future1.get();
            final Map<String, byte[]> resultMap = new HashMap<>(storageObjectMap.size());
            for (final Map.Entry<String, ?> resultEntry: storageObjectMap.entrySet()) {
                resultMap.put(resultEntry.getKey(), castAsByteArray(resultEntry.getValue()));
            }
            callback.completed(resultMap);
        });
        return Operations.cancellable(future);
    }
Create a storage backend using the given <i>memcached</i> client and
applying the given cache configuration, serialization, and hashing
mechanisms.
@param client how to talk to <i>memcached</i>
@param config apply HTTP cache-related options
@param serializer alternative serialization mechanism
@param keyHashingScheme how to map higher-level logical "storage keys"
  onto "cache keys" suitable for use with memcached
httpclient5-cache/src/main/java/org/apache/hc/client5/http/impl/cache/memcached/MemcachedHttpAsyncCacheStorage.java