在 ASP.NET MVC 应用程序中缓存 "dictionary-like" 个数据库实体

Cache "dictionary-like" DB entities in ASP.NET MVC app

我有 asp.net mvc5 项目托管在 Azure 中,该项目使用 SQL Azure 进行数据持久化。我数据库中的一些 table 就像字典,它们被很多 table 引用,而且很少更改。此类 table 的一个示例可以是客户端应用程序类型:Windows、Windows Phone、Android 等

但是有更多的数据库插入操作将数据插入到 tables 中,这些操作对那些字典 tables 有外部引用。 我想优化而不是对字典 table 进行 SQL 查询以在每次我想插入时获取某个实体的 ID(这不是过早的优化,Azure 可能会根据查询次数改变一些钱) .

实现该目标的好方法是什么?目前我有类似 DAO 的实体管理器,它带有静态字段,当对象被构造或显式调用 Refresh() 时(当字典数据通过我的 asp.net mvc 应用程序更新时)被填充。每个管理器都从自己的 table 中缓存实体。 这就像穷人的缓存。我想知道有没有更好的方法来做到这一点?有没有patterns/libraries/techniques缓存"dictionary-like"数据?

看看System.Web.Caching.Cache

它提供了一个很好的缓存框架,并允许多种缓存过期策略。

您可以使用 CacheDependency, which can be as simple as a time duration until the cache must be refreshed, or as complex as a SqlCacheDependency 控制缓存,当基础 SQL table 更改时自动刷新缓存(设置更复杂,但效率更高,因为它避免了不必要的缓慢刷新-更改 tables,并避免在 table 发生更改时缓存不同步)。

既然您在 Azure 中托管您的应用程序并使用 SQL Azure,那么为什么不使用 Microsoft Azure Redis 缓存。 Redis 是一种高级键值缓存和存储。

https://azure.microsoft.com/en-us/services/cache/

使用方法: https://azure.microsoft.com/en-us/documentation/articles/cache-dotnet-how-to-use-azure-redis-cache/