我们目前有一个应用程序框架,在该框架中,我们会在业务层自动缓存实体和实体集合(使用 .NET 缓存)。因此,GetWidget(int id) 方法在访问数据库之前使用 GetWidget_Id_{0} 键检查缓存,而 GetWidgetsByStatusId(int statusId) 方法使用 GetWidgets_Collections_ByStatusId_{0} 检查缓存。如果对象不在缓存中,则从数据库中检索它们并将其添加到缓存中。
这种方法对于读取场景显然是快速的,并且作为一揽子方法对我们来说实施起来很快,但是在对实体执行 CRUD 操作时需要清除大量缓存键。显然,随着其他方法的添加,这会影响性能,并且缓存的好处会减少。
我对处理集合缓存的替代方法感兴趣。我知道 NHibernate 缓存了集合中的标识符列表,而不是实际的实体。这是其他人尝试过的方法吗?有什么优点和缺点?
特别是我正在寻找优化性能并且可以通过样板生成代码自动实现的选项(我们有自己的代码生成工具)。我知道有些人会说每次都需要手动完成缓存以满足特定情况的需要,但我正在寻找能够自动完成大部分工作的东西。