Menu / szukaj

Caching w Azure Function – czyli jak podpiąć Redis’a

Pewnie już wiecie, ale tak w ramach przypomnienia… Microsoft przygotował niewielki zestaw bardzo przydatnych komponentów, które pozwalają na zintegrowanie naszej funkcji z następującymi usługami: Azure Storage, Azure Event Hubs, Azure Service Bus, Azure Mobile Apps, Azure Cosmos DB, Azure Notification Hubs, Twilio, SendGrid. Lista ta pozwala na zaspokojenie różnorakich scenariuszy. Ale jak zawsze chcielibyśmy coś więcej.

Dzisiaj chciałbym Wam pokazać jak w bardzo łatwy sposób można dodać cache do naszej funkcji. W przykładzie zostanie wykorzystany Redis. Pewnie zastanawiacie się po co? Niejednokrotnie mówiłem, że funkcje powinny być atomowe, bezstanowe, szybkie, … Rzeczywistość nie zawsze jest taka różowa. Czasami musimy coś zoptymalizować i zrobić rzecz nie do końca zgodnie z teorią. I tak było w tym przypadku.

Ale, przejdę do rzeczy… Po pierwsze musimy postawić sobie Redis’a i zapisać w ustawieniach naszej Function App Connection String (Platform features -> Application Settings -> Connection strings):

I już prawie połowa drogi za nami. Wróćmy do programowania i naszej funkcji. W katalogu z funkcją musimy utworzyć plik project.json i dorzucić do niego zależność do pakietu StackExchange.Redis:

{
  "frameworks": {
    "net46":{
      "dependencies": {
        "StackExchange.Redis": "1.2.6"
      }
    }
  }
}

Na portalu będzie to wyglądało w następujący sposób:

Ostatnim krokiem jest dodanie kodu, który połączy się z Redis’em:

using System.Net;
using StackExchange.Redis;
public static HttpResponseMessage Run(HttpRequestMessage req, TraceWriter log)
{
  // Connecting to Redis
  var connString = System.Configuration.ConfigurationManager.ConnectionStrings["RedisConnectionString"].ConnectionString;
  var cache = ConnectionMultiplexer.Connect(connString).GetDatabase();
  
  // Redis usage
  var currentData = (int)cache.StringGet("ExecutionCount");
  currentData++;
  cache.StringSet("ExecutionCount", currentData);

  return req.CreateResponse(HttpStatusCode.OK, "Execution count: " + currentData);
}

Łatwo można zauważyć, że przedstawiony przykład zlicza ilość uruchomień naszej funkcji.

Dodaj komentarz

imię*

e-mail* (nie publikowany)

strona www