Dela via


Implementera nivå 2-cache

Data-API Builder som länge stöds nivå 1 (L1) minnesintern cache och cacherelaterade HTTP-begärandehuvuden som no-store, no-cacheoch only-if-cached för att påverka cachebeteendet.

Cachelagring på nivå 2 (L2) utökar cachelagringen utöver den lokala processen genom att lägga till ett distribuerat cachelager. Med L2kan cachelagrade resultat återanvändas över flera DAB-instanser och kan överleva enskilda omstarter av containrar, vilket gör att tillståndslösa distributioner känns mindre tillståndslösa på alla rätt sätt.

Fördelar med cachelagring på nivå 2

Använd cacheminnet på nivå 2 när du vill:

  • Dela cachelagrade resultat över utskalade DAB-instanser
  • Minska databasens rundresor för upprepade läsningar
  • Håll tillståndslösa containrar varma efter återanvändning eller omdistribuering
  • Förbättra prestanda för läsintensiva arbetsbelastningar
  • Deltagande i namnområdescache med partitioner

Konfigurera inställningar för körningscachen

Nivå 2-cache konfigureras globalt under runtime.cache. Blockering av körningscachen möjliggör cachelagring, anger standardtiden till live (TTL) och konfigurerar den distribuerade cacheprovidern.

{
  "runtime": {
    "cache": {
      "enabled": true,
      "ttl-seconds": 30,
      "level-2": {
        "enabled": true,
        "provider": "redis",
        "connection-string": "localhost:6379",
        "partition": "prod-api"
      }
    }
  }
}

Körningsegenskaper

Fastighet Beskrivning
enabled Aktiverar cachestöd globalt.
ttl-seconds Anger standardtiden för cachen i sekunder.
level-2.enabled Aktiverar den distribuerade cachenivån.
level-2.provider Väljer den distribuerade cacheprovidern. Stöds för närvarande redis .
level-2.connection-string Anslutningssträng för Redis-instansen.
level-2.partition Valfritt namnområde för Redis-nycklar och backplanskanalen. Endast containrar som använder samma partition delar samma distribuerade cacheutrymme.

Konfigurera entitetsspecifikt cachebeteende

Entiteter kan åsidosätta det globala cachebeteendet. Använd entitetsblocket cache för att aktivera cachelagring, ange en anpassad TTL och välj cachenivå.

{
  "entities": {
    "Products": {
      "source": "dbo.Products",
      "cache": { "enabled": true, "ttl-seconds": 120, "level": "L1L2" }
    },
    "Orders": {
      "source": "dbo.Orders",
      "cache": { "enabled": true, "level": "L1" }
    }
  }
}

Egenskapen cache.level

Använd cache.level för att styra vilka cachenivåer en entitet använder.

Värde Beskrivning
L1 Endast minnesintern cache. Snabb och lokal för den aktuella DAB-processen.
L1L2 Minnesinternt plus distribuerad cache. Den här nivån är standardvärdet för cachelagrade entiteter.

Om L2 inte är aktiverat globalt fungerar en entitet som konfigurerats med L1L2 som L1.

Så här fungerar L1L2

Tips/Råd

TL; DRL1L2 = Begär → L1 → L2 → databas → L2 → L1 → Response

Som standard använder en entitet med cachelagring aktiverat nivå L1L2.

  • L1 är cacheminnet per process i minnet.
  • L2 är det distribuerade cachelagret, för närvarande Redis, plus ett backplan för enhetlighet mellan instanser.

Med L1L2 utför en cachesökning först en kontroll av L1. Vid en L1 miss kontrollerar L2 den om cachelagring på nivå 2 är globalt aktiverad och konfigurerad. Om posten inte hittas i något av skikten kör DAB databasfrågan. Resultatet lagras sedan i både L1 och L2.

Det innebär:

  • Framtida begäranden på samma instans hanteras från lokala L1
  • Begäranden om andra instanser kan läsa från L2 och höja upp posten till sina egna L1
  • Om en container startas om kan en L1 miss följt av en L2 träff fortfarande undvika en databasresa

Den här kombinationen ger dig en varm distribuerad cache över utskalade eller återvunna instanser.

Stöd för Redis

Redis är den aktuella providern för cachelagring på nivå 2. Det passar bra för det här scenariot eftersom det stöder:

  • Delad åtkomst över flera DAB-instanser
  • Nyckelförfallodatum för TTL-baserad cachelagring
  • Snabba läsningar och skrivningar för arbetsbelastningar med högt dataflöde
  • Koordinering av backplan mellan instanser

Partitionerade cacheutrymmen

Använd den valfria partition inställningen för att isolera distribuerad cacheaktivitet. DAB använder partitionsvärdet för namnområdet Redis-nycklar och backplanskanalen. Endast containrar som delar samma partition deltar i samma distribuerade cacheutrymme.

Den här inställningen är användbar när du vill:

  • Separera produktions- och icke-produktionstrafik
  • Isolera klientorganisationer eller miljöer
  • Förhindra att orelaterade tjänster delar cachelagrade poster

Se även