c# - 如何将数据库数据缓存到内存中以供 MVC 应用程序使用?

标签 c# caching asp.net-mvc-4

我有一个有点复杂的权限系统,总共使用六个数据库表,为了加快速度,我想将这些表缓存在内存中,而不是每次加载页面时都必须访问数据库。

但是,当添加新用户或更改权限时,我需要更新此缓存。我不确定如何将它放入内存缓存中,以及如何安全地更新它而不会在更新的同时访问它而不会引起问题

有没有人可以举例说明如何做这样的事情,或者可以为我指明正确的研究方向?

最佳答案

在不了解更多关于应用程序结构的情况下,有很多可能的选择。一个这样的选择可能是抽象存储库接口(interface)背后的数据访问并处理该存储库中的内存缓存。像私有(private)一样简单的东西 IEnumerable<T>在存储库对象上。

例如,假设您有一个 User对象,其中包含有关用户的信息(名称、权限等)。你会有一个 UserRepository有一些基本的获取/保存方法。在该存储库中,您可以维护一个私有(private)静态 HashSet<User>其中包含 User已经从数据库中检索到的对象。

当你获取 User 时从存储库中,它首先检查 HashSet对于要返回的对象,如果它没有找到它,它会从数据库中获取它,将它添加到 HashSet ,然后返回它。当你保存 User它同时更新了 HashSet和数据库。

同样,在不了解代码库和整体设计细节的情况下,很难给出更具体的答案。不过,这应该是一个足够通用的解决方案,适用于任何应用程序。

关于c# - 如何将数据库数据缓存到内存中以供 MVC 应用程序使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17305578/

相关文章:

java - Spring + Hibernate 与 Hazelcast 作为二级缓存

php - 具有 APC 缓存的 key 组

javascript - page.aspx和code behind(page.aspx.vb)关系问题

c# - 按值将字典分组

c# - 使用 HttpContext.Current.Application 存储简单数据

Java 基准测试 : Ensuring that objects are not reused after coming out of scope

c# - Log4Net : "Could not load file or assembly ' log4net, 错误 Version=1.2.10.0,Culture=neutral,PublicKeyToken=null' 或其依赖项之一”

c# - 在 MVC Controller 操作中暂停

javascript - 如何将列表从 C# Angular 传递到 Angular Controller ?

c# - 在 .net 核心中获取执行程序集名称