2016-06-24 5 views
1

Мы используем кеш-спрей (пока не можем перейти на akka-http), чтобы кэшировать результаты из нисходящей службы, которую мы вызываем. Эффект, который мы хотим, заключается в том, что если данным больше 15 минут, выполните вызов, иначе верните кешированные данные.спрей-кеш: вернуть старое значение, если будущее не выполнено.

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

ответ

3

Похоже, что Spray не поставляется с реализацией кэширования по умолчанию, которая делает то, что вы хотите , Согласно the spray-caching docs имеются две реализации к признаку Cache: SimpleLruCache и ExpiringLruCache.

То, что вы хотите это Cache, что отличает Стажер EXPIRATION (удаление записи из кэша) из записи ReFRESH (выборка или вычисление более поздней копии записи).

Поскольку обе реализации по умолчанию сливают эти два понятия в одно значение тайм-аута, я думаю, что лучше всего будет написать новую реализацию Cache, которая отличает обновление от истечения срока действия.