这是场景
我有一个 ASP.NET 4.0 应用程序,它有很多旧版 URL 重写。我想构建一个 HTTP 模块,该模块将查看这些重写的数据库,并在需要时进行 301 重定向。这张表有几万条记录。
所以很明显我需要做某种缓存,所以我不会访问数据库并搜索每个页面请求的所有这些记录。
我们的要求之一是在我们的应用程序由于某种原因(工作进程回收或您有什么)回收时具有快速启动时间。所以我不想在应用程序启动时加载整个表。该应用程序的启动速度已经非常缓慢。
我的绝妙/荒谬的想法是,
问题
我的问题是:
一个线程安全的字典?这
后台线程可能正在更新
新请求时的字典
来了。
以线程安全的方式进行
收集减慢传入请求?
谢谢!!
最佳答案
如果您的目标是 .NET 4.0,您可以使用 ConcurrentDictionary
它会在并发方面为您处理所有的魔法。只需使用 GetOrAdd
对于传入的请求和 AddOrUpdate
为您的背景人口想法。
我也想提出一些让你思考的问题。如果您有这数千个 URL,您真的只在一台服务器上运行吗?我问这个是因为您在这里只谈论本地缓存方案。如果您有三台服务器,所有这些服务器都将在数据库中获取 URL 数据。您是否正在研究像 Windows Server AppFabric 或 Memcached 这样的分布式缓存技术?
关于asp.net - ASP.NET HttpModules 中的线程安全缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6380804/