2013-12-16 62 views
0

具有多个进程,使用相同的缓存(在这种情况下为memcached)。这些流程是:分布式缓存密钥生成器

  • 一个ASP.NET MVC应用4
  • 控制台应用程序

我怎么能生成缓存键?

我一直在考虑使用一个采用程序集名称,完整类型名称,方法名称及其参数的策略。这看起来是这样的:

public static string GenerateKeyFor<T>(Expression<Action<T>> expr) 
{ 
    var method = Symbols.GetMethodInfo(expr); 
    var parameters = Symbols.GetParameters(expr); 

    var sb = new StringBuilder(); 

    sb.Append(method.DeclaringType.FullName) 
     .Append(" - ") 
     .Append(method.Name) 
     .Append(" - "); 

    return parameters 
     .Aggregate(sb, AddParams) 
     .ToString(); 
} 

用法:

var key = CacheUtils.GenerateKeyFor<HomeController>(x => x.List()); 

但是,如果我再要退出前。一个ActionResult在ASP.NET MVC应用程序中,从控制台应用程序,然后我需要在我的控制台应用程序中引用ASP.NET MVC应用程序,以便可以参考HomeController类型。有没有更好的方法来为这种场景生成密钥?

回答

1

控制台应用程序是否为Web应用程序提供了一些监视工具?如果是这样,您可以在Web应用程序上创建一个公共API来清除缓存条目,并根据用例从控制台应用程序调用这些/这些(而不是驱逐特定条目)。

如果您确实需要驱逐“双向”或“使用案例驱逐”数量太多,请使用要缓存的类型/方法的接口。将这些接口放在一个组件中,这些组件都是您的客户引用的。然后改为创建这些接口方法的键。 或者,也可以使用常量字符串作为缓存键(而不是动态构建它们),并将它们放入常用程序集中。