程序开发 > C# > 正文

两个有相同缓存名的网站运行于同一服务器有无影响(Cache作用范围)

亮术网 2020-08-21 本网原创

为节省服务器资源和加快网页显示速度,经常会把一些实时性要求高的数据缓存起来。如果两个网站用了同一个缓存名,把它们运行在同一服务器,它的值会不会相互覆盖?如果会,那么程序不就会出现取错数据的错误。我们知道,变量、方法都有作用范围,同样Cache也有作用范围,理论上来讲,不同网站的缓存名即使相同,把它部署到同一服务器,由于各有各的作用范围,所以它们不会相互影响,自然也不会取错数据。

为证实两个有相同缓存名的网站运行于同一服务器倒底有无影响,我们举一个具体实例。先在一个网站A添加一个缓存名为 CacehTest 的缓存,然后在另一个网站B也添加一个缓存名为 CacehTest 的缓存,分别为它们设置不同的数据。

 

两个有相同缓存名的网站运行于同一服务器有无影响(Cache作用范围)实例

1、在网站A添加一个缓存名为 CacehTest 的缓存

private void GetCacheName()
  {
    string cacheName = "CacehTest";
    if (Cache[cacheName] == null)
      Cache.Insert(cacheName, "Cache1", null, Cache.NoAbsoluteExpiration, TimeSpan.FromHours(10), CacheItemPriority.Normal, null);

  lbl1.Text = Cache[cacheName].ToString();
  }

在页面载入时调用这个方法,就会在前台页面输出所缓存的值,缓存值赋给了一个 Label 控件,最终输出值为 Cache1。为进一步验证是否取错数据,第二次先执行网站B的页面再执行网站A的页面,结果也输出 Cache1,说明没有取错数据,Cache作用范围仅限于所在的网站。

 

 

二、在网站B添加一个缓存名为 CacehTest 的缓存

private void GetCacheName()
  {
    string cacheName = "CacehTest";
    if (Cache[cacheName] == null)
      Cache.Insert(cacheName, "Cache2", null, Cache.NoAbsoluteExpiration, TimeSpan.FromHours(10), CacheItemPriority.Normal, null);

  lbl2.Text = Cache[cacheName].ToString();
  }

在网站B的 Cache 中保存一个值为 Cache2,并把此值赋给一个名称为 lbl2 的 Label 控件,最终输出值为 Cache2。接着先执行一次A站的页面再执行B站的页面,结果也输出 Cache2,说明没有取错数据。