Настройка
Я пытаюсь реализовать довольно распространенный шаблон кэширования.Вот что я хочу сделать:
- При первом запросе записи ее значение кэшируется.
- Последующие запросы возвращают кэшированную запись.
- Когдазапись изменена, кэшированная версия помечена как недействительная.
- Следующий запрос к записи кэширует новое значение.
Проблема
Cache.simple()
кэширует значениякак и ожидалось, но у меня, похоже, нет инструмента для аннулирования кэшированного значения.Cache.make()
кажется инструментом, предназначенным для этой работы, но я не смог его успешно использовать.
Источник
Это полный пример (который собирается и запускается).Я хочу сделать недействительной кэшированную запись в конце set_name
(после сохранения нового значения).Если кэшированная запись успешно признана недействительной, при обновлении страницы должно отображаться имя, отправленное из текстового ввода.
type User.t =
{ id : int
; name : string
}
db /user: intmap(User.t)
create_user() =
match ?/user[0] with
| {none} -> /user[0] <- {id=0 name="tom"}
| _ -> void
set_name(new_name: string) =
/user[0]/name <- new_name
// After setting a new name, invalidate the cached result.
_get_name(uid:int) : string =
/user[uid]/name
get_name = Cache.simple(_get_name)
page() =
do create_user()
<>User's name is "{get_name(0)}"</>
<form onsubmit={_ -> set_name(Dom.get_value(#name_input))}>
<input type="text" id=#name_input />
</form>
server = one_page_server("User", page)
Спасибо.