Я запрашиваю у своих источников данных NHibernate, используя выражение Linq. Проблема, с которой я сталкиваюсь, состоит в том, что никакие два вызова (или оценки, извиняемые за плохой словарный запас) выражения, когда-либо совпадающего в сравнении. Как следствие, NHibernate слишком часто выполняет один и тот же SQL с теми же параметрами.NHibernate Caches: разумное использование, лучшие практики?
Я грузил вокруг этого вопроса, используя NHibernate кэшей, свободно сконфигурированные так:
Fluently.Configure().Database(MsSqlConfiguration.MsSql2008
.ConnectionString(c => c.Is(cStr))
.ShowSql())
.Mappings(x => x.FluentMappings.AddFromAssemblyOf<MyClassMap>())
.Cache(x=>x.UseQueryCache()
.ProviderClass("NHibernate.Cache.HashtableCacheProvider"))
Я позабочусь провайдер позже, так что это не будет в конечном итоге в производстве. Далее, все мои запросы обозначаются как кэшируемым:
session.Query<MyClass>().Cacheable().Where(filter).ToList();
Насколько я имею read, кэширование запросов происходит в кэш-памяти второго уровня, который имеет один-в-SessionFactory сферу. Это, с другой стороны, означает, что для перезагрузки моих данных приложения мне пришлось бы восстановить SessionFactory, что, по моему мнению, намного дороже, чем то же самое с сеансами.
Является эффективным способом кэширования запросов без беспорядка (не буквально, знаешь, что я имею в виду) с SessionFactory?
Спасибо за ссылку. Ну, а не вручную, но в конечном итоге с тем же последствием: данные редактируются по всей компании с разных компьютеров, каждый из которых имеет свои собственные SessionFactories и сеансы ... Если бы я не очистил кеши, я бы работал с возможно устаревшими объектами –
@SebastianEdelmeier использует распределенный кеш, затем –
@DiegoMijelshon вы имеете в виду другой продукт, такой как NCache? –