分布式缓存密钥生成器

时间:2013-12-16 07:49:01

标签: c# asp.net-mvc caching memcached

拥有多个进程,使用相同的缓存(在本例中为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());

然而,如果我想要驱逐前。 ASP.NET MVC应用程序中的ActionResult,来自Console应用程序,然后我需要在我的控制台应用程序中引用ASP.NET MVC应用程序,以便可以引用HomeController类型。是否有更好的方法为这种情况生成密钥?

1 个答案:

答案 0 :(得分:1)

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

如果你真的需要驱逐“双向”或“用例驱逐”的数量太多,请使用要缓存的类型/方法的接口。将这些接口放在一个/所有客户端引用的程序集中。然后构建这些接口方法的密钥。 或者,作为替代方案,使用常量字符串作为缓存键(而不是动态构建它们)并将它们放在一个通用程序集中。