В настоящее время я учу себя некоторым F # и делаю так, работая над (немым) приложением, которое читает и обновляет клиентов, которые хранятся в базе данных. Каждый клиент имеет свойство «тип клиента», которое хранится в отдельной таблице в базе данных. Поскольку список типов клиентов практически постоянный, я хочу кэшировать запрос базы данных, который извлекает эти типы клиентов, например.F # обновление кэшированного списка
let getCustomerTypes =
let allTypes = SomeDbFunction |> Seq.map SomeMappingFunction
Seq.cache allTypes
Теперь я stubled на проблему, что, когда я ввожу новый тип клиента (опять же, это происходит скажем, раз в месяц), вызов getCustomerTypes не отражает недавно вставленный тип клиента. Чтобы решить эту проблему, я просмотрел memoization, например. http://blogs.msdn.com/b/dsyme/archive/2007/05/31/a-sample-of-the-memoization-pattern-in-f.aspx. Однако целью memoization является возвращение значения, если оно ранее было рассчитано, но это не соответствует моему сценарию.
Что такое рекомендуемый функциональный/F # способ обновления кеша?
Честно говоря, я бы использовал [MemoryCache] (https://msdn.microsoft.com/en-us/library/system.runtime.caching.memorycache%28v=vs.110%29.aspx) и избегать головной боли при повторном создании правил выселения кеша и тому подобное. Если вы не нуждаетесь в срочном выселении, то простой словарь будет ... –
@ PatrykĆwiek В конце концов я решил использовать словарь; поэтому ваш комментарий заслуживает кредитов. Не могли бы вы прокомментировать свой комментарий? – SimonAx