Обновление асинхронного кэша с помощью Spring Cache Abstraction

Используя абстракцию кэширования Spring, как я могу сделать так, чтобы кеш обновлял запись асинхронно, при этом возвращая старую запись?

Я пытаюсь использовать абстракцию кэширования Spring для создания системы кэширования, в которой после относительно короткого «мягкого» тайм-аута записи кэша становятся доступными для обновления. Затем, когда они запрашиваются, возвращается кэшированное значение, и запускается асинхронная операция обновления для обновления записи. Я бы тоже

Компоновщик кэша Guava позволяет мне указать, что записи в кэше должны обновляться через определенное время. Затем метод reload () загрузчика кэша может быть переопределен асинхронной реализацией, позволяющей возвращать устаревшее кэшированное значение до тех пор, пока не будет получено новое. Однако весеннее кэширование, по-видимому, не использует CacheLoader базового кэша Guava.

Возможно ли выполнить такого рода асинхронное обновление кэша, используя абстракцию кэширования Spring?

Изменить, чтобы уточнить: С помощью CacheBuilder в Guava я могу использовать refreshAfterWrite (), чтобы получить желаемое поведение. например отОбъяснения кеша гуавы:

LoadingCache<Key, Graph> graphs = CacheBuilder.newBuilder()
   .maximumSize(1000)
   .refreshAfterWrite(1, TimeUnit.MINUTES)
   .build(
       new CacheLoader<Key, Graph>() {
         public Graph load(Key key) { // no checked exception
           return getGraphFromDatabase(key);
         }

         public ListenableFuture<Graph> reload(final Key key, Graph prevGraph) {
           if (neverNeedsRefresh(key)) {
             return Futures.immediateFuture(prevGraph);
           } else {
             // asynchronous!
             ListenableFutureTask<Graph> task = ListenableFutureTask.create(new Callable<Graph>() {
               public Graph call() {
                 return getGraphFromDatabase(key);
               }
             });
             executor.execute(task);
             return task;
           }
         }
       });

Однако я не вижу способа получить поведение refreshAfterWrite () с помощью абстракции @Cacheable в Spring.

Ответы на вопрос(2)

Ваш ответ на вопрос