我今天观察到一个奇怪的情况(对我来说至少很奇怪)。我们实现了一个内存中缓存,该缓存存储了一些键值对,并且这些键值对在天蓝色的webjob中使用。
我们观察到的是,即使我们重新启动Webjob或什至在其下运行该作业的应用程序服务,此内存高速缓存也不会重置并且值将保留。仅当我们重新部署webjob时,此缓存才会重置。缓存变量的声明如下所示。
protected volatile static Dictionary<string, object> Cache = new Dictionary<string, object>();
它正被暴露给其他类,如下所示
public static class CacheFactory
{
static bool isInitialized;
static bool useDefault = true;
static readonly object lockObject = new object();
public static ICache Cache
{
get
{
if (!isInitialized)
{
lock (lockObject)
{
useDefault = !Factory.Contains<ICache>();
}
isInitialized = true;
}
return useDefault ? new DictionaryCache() : Factory.Create<ICache>();
}
}
}
只有在Factory中注册的ICache实现才是DictionaryCache。