每隔一段时间,我的任务就是对数据库中可能已经缓存在内部应用程序中的一个或多个业务实体进行更改。为了让应用程序在不循环应用程序池的情况下反映这些更改,我想我应该嵌入开发/管理员从应用程序 UI 中逐出缓存的功能(完全或某些对象),但我注意到了该方法说明以下...
/// <summary>
/// Evict an entry from the process-level cache. This method occurs outside
/// of any transaction; it performs an immediate "hard" remove, so does not respect
/// any transaction isolation semantics of the usage strategy. Use with care.
/// </summary>
void ISessionFactory.Evict(Type persistentClass, object id);
这到底是什么意思呢?如果我试图驱逐一个或多个交易中可能涉及的对象,可能会出现什么问题,如果它们具有破坏性,是否有办法避免这些副作用?我目前正在使用 SysCache2 并正在寻找有关如何使用 SqlDependency 的实现细节,但同时我仍然对 Evict 效果感到好奇。
更新:仔细查看评论后,似乎从进程级缓存中删除,并SessionFactory.Evict()
从二级缓存中删除。然而,这两种口味都存在相同的免责声明。所以我原来的问题仍然存在。如果实体当前正在另一个事务中使用,那么从缓存(进程或二级)中逐出实体有什么危险?SessionFactory.EvictCollection()
SessionFactory.EvictEntity()