Однако, здравствуйте. Случилась у меня необходимость переписать старую, написанную до меня, очень корявую реализацию(забыл сказать, что на Java) кеширования частоиспользуемых таблиц . И дано было конкретное пожелание - сделать это всё с использованием чудесной библиотеки Spray-caching(Akka, акторы, future - вот это всё). Но одна проблема - я криворукий неопытный java-джуниор и сочетание незнакомой области, нового языка(Scala для меня в новинку) и библиотеки с практически полным отсутствием информации(обычно, всегда когда я сталкивался с чем то новым, то проходил путь тысяч предыдущих падаванов уже разобраших все грабли и написавших подробный гайды и доки) по ней привели мой мозг в состояние киселя. Посему я призываю в это обсуждение всех Scala-и-не-только-гуру с целью разобраться как же всё таки работает эта чудесная(по обещаниям в доках это действительно так) библиотека и привести каике либо примеры ее использования.
наверное проблема в том что я пытаюсь построить систему в голове, но не понимаю как она работает(мб, мой английский недостаточно хорош) или не понимаю фьючеры. если можно то пожалуйста помогите мне с несколькими глупыми вопросами :
1) чем отличаются вот эти три варианта
def apply(key: Any)(expr: => V): Future[V]
def apply(key: Any)(future: => Future[V]): Future[V]
def apply(key: Any)(func: Promise[V] => Unit): Future[V]
я не понял что за пуш-стиль и вообще что для чего и лучше использовать
2) сам принцип работы кэша в спрее
def cachedOp[T](key: T): Future[Double] = cache(key) {
expensiveOp()
} - вот я не уловил, это я один раз какие то данные закешировал или кэш будет как то по таймеру или еще как сам обновляться?
3) наконец в чем реальные плюсы spray-caching и вообще всего spray(если у вас есть опыт работы с ним), а то приказ получен а чем именно спрей так хорошо я не понимат.
4) какие подводные камни и хитрости работы с ним
1) чем отличаются вот эти три варианта
параметрами, в одном случае поhсто выражение, в других адаптированно под асинхронность (в частности akka)
2) сам принцип работы кэша в спрее https://github.com/spray/spray/wiki/Caching есть разные виды кешей
3) я пришел в реальный проект который разрабатывался пол года до меня, меня на стадии выбора не было
4) я лично с ними не сталкивался
@anyd3v черт, я все равно не понимаю =( допустим у меня есть функции берущие из БД некий резалтсет и возвращающие его в виде листов c json. что то типа public List getCar(),public List getHome() и т.д. как мне правильно организовать кеширование, чтобы данные в кэше например раз в час обновлялись, а предыдущие удалялись(только свежие данные в кеше)?
вот так?
def cachedOp[T](key: T): Future[List] = cache(key) {
getCar();
getHome();
}
?
прошу прощения что задаю возможно очень тупые вопросы но я очень хочу разобраться и понять по шагам как это работает. почему например создаётся массив фьючеров и так далее.