ASP.NET HttpModule中的线程安全缓存 下面是一个场景

ASP.NET HttpModule中的线程安全缓存 下面是一个场景,asp.net,multithreading,caching,thread-safety,httpmodule,Asp.net,Multithreading,Caching,Thread Safety,Httpmodule,我有一个ASP.NET4.0应用程序,它有很多旧的URL重写。我想构建一个HTTP模块,它将查看这些重写的数据库,并在需要时执行301重定向。这个表中有成千上万条记录 所以很明显,我需要做一些缓存,这样我就不会访问数据库并搜索每个页面请求的所有记录 我们的一个要求是,当我们的应用程序由于某种原因(工作进程或其他原因)回收时,要有一个快速启动时间。所以我不想在应用程序启动时加载整个表。应用程序的启动速度已经非常慢 我聪明/可笑的想法是 在我的HttpModule中启动应用程序时,创建一个空字典来保

我有一个ASP.NET4.0应用程序,它有很多旧的URL重写。我想构建一个HTTP模块,它将查看这些重写的数据库,并在需要时执行301重定向。这个表中有成千上万条记录

所以很明显,我需要做一些缓存,这样我就不会访问数据库并搜索每个页面请求的所有记录

我们的一个要求是,当我们的应用程序由于某种原因(工作进程或其他原因)回收时,要有一个快速启动时间。所以我不想在应用程序启动时加载整个表。应用程序的启动速度已经非常慢

我聪明/可笑的想法是

  • 在我的HttpModule中启动应用程序时,创建一个空字典来保存重写
  • 启动后台工作线程。应用程序将继续启动
  • 后台工作线程更新字典,比如说,哦,最多1000次最常用的重写 问题 我的问题是:

  • 这可笑吗
  • 有这样的事吗 线程安全字典?这个 后台线程可能正在更新 当有新的请求时打开字典 他们进来了
  • 所有的锁都可以吗 这在线程安全中进行 收集会降低传入请求的速度吗

  • 谢谢

    如果您的目标是.NET4.0,那么您可以使用它,它将为您带来并发方面的所有魔力。只需将
    GetOrAdd
    用于传入请求,将
    AddOrUpdate
    用于您的背景填充


    我还想为你们提出一些想法。如果你有成千上万个URL,你真的只在一台服务器上运行吗?我这样问是因为这里只讨论本地缓存方案。如果你有三台服务器,它们都会在数据库中寻找URL数据。您是否正在研究像Windows Server AppFabric或Memcached这样的分布式缓存技术?

    如果您的目标是.NET 4.0,您可以使用它,它将为您带来并发方面的所有魔力。只需将
    GetOrAdd
    用于传入请求,将
    AddOrUpdate
    用于您的背景填充

    我还想为你们提出一些想法。如果你有成千上万个URL,你真的只在一台服务器上运行吗?我这样问是因为这里只讨论本地缓存方案。如果你有三台服务器,它们都会在数据库中寻找URL数据。您是否正在研究像Windows Server AppFabric或Memcached这样的分布式缓存技术