class CaffeineReactiveCache<E> extends AbstractReactiveCache<E> {

    private Cache<Object, Object> cache;

    @Override
    public Mono<Void> evictAll(Iterable<?> key) {
        return Mono.fromRunnable(() -> cache.invalidateAll(key));
    }

    @Override
    public Flux<E> getAll(Object... keys) {<FILL_FUNCTION_BODY>}

    @Override
    protected Mono<Object> getNow(Object key) {
        return Mono.justOrEmpty(cache.getIfPresent(key));
    }

    @Override
    public Mono<Void> putNow(Object key, Object value) {
        cache.put(key, value);
        return Mono.empty();
    }

    @Override
    public Mono<Void> evict(Object key) {
        return Mono.fromRunnable(() -> cache.invalidate(key));
    }

    @Override
    public Mono<Void> clear() {
        return Mono.fromRunnable(() -> cache.invalidateAll());
    }
}

        return Flux.<E>defer(() -> {
            if (keys == null || keys.length == 0) {
                return Flux.fromIterable(cache.asMap().values())
                           .map(e -> (E) e);
            }
            return Flux.fromIterable(cache.getAllPresent(Arrays.asList(keys)).values())
                       .map(e -> (E) e);
        });
    
<methods>public non-sealed void <init>() ,public abstract Mono<java.lang.Void> clear() ,public abstract Mono<java.lang.Void> evict(java.lang.Object) ,public abstract Mono<java.lang.Void> evictAll(Iterable<?>) ,public transient Flux<E> getAll(java.lang.Object[]) ,public final Flux<E> getFlux(java.lang.Object) ,public final Flux<E> getFlux(java.lang.Object, Supplier<Flux<E>>) ,public final Mono<E> getMono(java.lang.Object) ,public final Mono<E> getMono(java.lang.Object, Supplier<Mono<E>>) ,public final Mono<java.lang.Void> put(java.lang.Object, Publisher<E>) ,public abstract Mono<java.lang.Void> putNow(java.lang.Object, java.lang.Object) <variables>private final Map<java.lang.Object,org.hswebframework.web.cache.supports.AbstractReactiveCache.CacheLoader> cacheLoading,static Sinks.EmitFailureHandler emitFailureHandler