2013-12-16 3 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()); 

Однако, если я хочу, то выселить экс. a ActionResult в приложении ASP.NET MVC, из приложения Console, тогда мне нужно будет ссылаться на приложение ASP.NET MVC в моем приложении консоли, чтобы ссылаться на тип HomeController. Есть ли лучший способ генерировать ключи для таких сценариев?

ответ

1

Является ли консольное приложение некоторым средством мониторинга для веб-приложения? Если это так, вы можете создать общедоступный API в веб-приложении, выбирая записи кэша и вызывать это/их из консольного приложения на основе прецедента (вместо выписки конкретных записей).

Если вам действительно нужно вытеснить «оба направления» или количество «выселений из прецедентов» слишком много, используйте интерфейсы типов/методов, которые вы хотите кэшировать. Поместите этот интерфейс в сборку, которая ссылается как на все ваши клиенты. Затем создайте ключи этих методов интерфейса. Или, как альтернатива, используйте постоянные строки в качестве ключей кеша (вместо их динамического создания) и поместите их в общую сборку.

Смежные вопросы