@Override
        public List<Routed<V>> findAll(RoutingContext routingCtx) {
            final List<V> cachedList = findAllCache.getIfPresent(routingCtx);
            if (cachedList != null) {
                return filterRoutes(cachedList, routingCtx);
            }

            // Disable matching headers and/or query parameters only if there's dynamic predicate routes.
            final List<Routed<V>> result = delegate.findAll(
                    dynamicPredicateRoutes.isEmpty() ? routingCtx : new CachingRoutingContext(routingCtx));
            final List<V> valid = result.stream()
                                        .filter(Routed::isPresent)
                                        .map(Routed::value)
                                        .collect(toImmutableList());
            findAllCache.put(routingCtx, valid);
            return filterRoutes(valid, routingCtx);
        }
A {@link Router} which is wrapped with a {@link Cache} layer.
core/src/main/java/com/linecorp/armeria/server/RouteCache.java