Naar inhoud
lightbulb Welkom op de nieuwe kennisbank | We hebben de docs volledig vernieuwd met meer dan 160 features. Bekijk wat nieuw isarrow_forward

Cache Service voor snellere Apps Script-scripts

Versnel Apps Script met de Cache Service: bewaar tijdelijk data in script-, document- of gebruikers-cache om herhaalde API-aanroepen en quota-verbruik te vermijden.

Cache Service overzicht

De Cache Service biedt een tijdelijke sleutel-waarde store die scripts aanzienlijk kan versnellen. Het is ideaal voor het cachen van externe API-resultaten, zware berekeningen en configuratiedata die niet bij elke uitvoering opnieuw opgehaald hoeft te worden.

Er zijn drie cache-typen:

  • Script cache: gedeeld door alle gebruikers van het script.
  • Document cache: gedeeld door alle gebruikers in het huidige document.
  • User cache: privé per gebruiker.
const scriptCache = CacheService.getScriptCache();
const docCache = CacheService.getDocumentCache();
const userCache = CacheService.getUserCache();

Basis caching-patroon

function haalDataOpMetCache(key) {
  const cache = CacheService.getScriptCache();

  const gecached = cache.get(key);
  if (gecached) {
    Logger.log('Cache hit voor: ' + key);
    return JSON.parse(gecached);
  }

  Logger.log('Cache miss, data ophalen...');
  const data = haalDataOpVanBron(key);

  cache.put(key, JSON.stringify(data), 3600);

  return data;
}

function haalDataOpVanBron(key) {
  const response = UrlFetchApp.fetch(`https://api.voorbeeld.nl/data/${key}`);
  return JSON.parse(response.getContentText());
}

Bulk-caching met putAll en getAll

Met putAll() en getAll() schrijf en lees je meerdere sleutels in een enkele aanroep. Dat is sneller dan een lus met losse put()- en get()-aanroepen.

function cacheMeerderItemsInEenKeer() {
  const cache = CacheService.getScriptCache();

  const items = {
    'config_versie': '2.1.0',
    'max_rijen': '500',
    'api_endpoint': 'https://api.voorbeeld.nl/v2',
    'timeout_sec': '30',
  };

  cache.putAll(items, 7200);

  const sleutels = ['config_versie', 'max_rijen', 'api_endpoint'];
  const resultaten = cache.getAll(sleutels);

  Object.entries(resultaten).forEach(([k, v]) => {
    Logger.log(`${k}: ${v || '(niet gecached)'}`);
  });
}
info

Cache-waarden zijn altijd strings

Cache-waarden moeten strings zijn. Gebruik JSON.stringify() voor objecten en arrays, en JSON.parse() bij het ophalen. De maximale waardegrootte is 100 KB per sleutel en een sleutel mag maximaal 250 tekens lang zijn.

Cache invalideren

function verwijderCacheItems() {
  const cache = CacheService.getScriptCache();

  cache.remove('config_versie');

  cache.removeAll(['max_rijen', 'api_endpoint', 'timeout_sec']);

  Logger.log('Cache geleegd');
}

Configuratie cachen

Een veelgebruikt patroon is om configuratie uit een Spreadsheet eenmalig in te lezen en daarna te cachen. Zo voorkom je dat elke uitvoering opnieuw de hele sheet uitleest.

function getConfig() {
  const cache = CacheService.getScriptCache();
  const cacheKey = 'app_config';

  const gecachede = cache.get(cacheKey);
  if (gecachede) {
    return JSON.parse(gecachede);
  }

  const blad = SpreadsheetApp.openById('CONFIG_SHEET_ID').getSheetByName('Config');
  const data = blad.getDataRange().getValues();

  const config = {};
  data.forEach(rij => {
    if (rij[0] && rij[1]) {
      config[rij[0]] = rij[1];
    }
  });

  cache.put(cacheKey, JSON.stringify(config), 1800);
  return config;
}

API-resultaten cachen

Externe API's hebben vaak hun eigen rate limits en kosten. Door resultaten kort te cachen verminder je het aantal verzoeken en blijf je binnen het Apps Script-quotum voor UrlFetchApp.

function haalWeersdata(stad) {
  const cache = CacheService.getScriptCache();
  const key = `weer_${stad.toLowerCase().replace(/\s/g, '_')}`;

  const gecached = cache.get(key);
  if (gecached) {
    return JSON.parse(gecached);
  }

  const props = PropertiesService.getScriptProperties();
  const apiKey = props.getProperty('WEATHER_API_KEY');

  const url = `https://api.openweathermap.org/data/2.5/weather?q=${encodeURIComponent(stad)}&appid=${apiKey}&units=metric&lang=nl`;
  const response = UrlFetchApp.fetch(url);
  const data = JSON.parse(response.getContentText());

  cache.put(key, JSON.stringify(data), 600);

  return data;
}
warning

Bewaar geen geheimen in de cache

Sla nooit API-sleutels, wachtwoorden of tokens op in de Cache Service. Gebruik daarvoor de PropertiesService (script properties). Bedenk ook dat de script cache gedeeld is door alle gebruikers van het script: cache geen persoonsgegevens in de script cache, gebruik daarvoor de user cache.

Cache-first strategie voor een externe API

  1. Bepaal een consistente cache-sleutel op basis van de queryparameters.
  2. Controleer de cache met cache.get(key).
  3. Bij een cache hit: parse de JSON en retourneer direct.
  4. Bij een cache miss: roep de externe API aan met UrlFetchApp.fetch().
  5. Sla het resultaat op met cache.put(key, JSON.stringify(data), ttl).
  6. Retourneer de data.
lightbulb

Combineer Cache en Properties

Gebruik een gelaagde aanpak: bewaar stabiele configuratie in PropertiesService (persistent) en cache afgeleide of dure resultaten in de Cache Service (snel maar tijdelijk). Schrijf je get()-code altijd zo dat een lege cache geen fout veroorzaakt, maar gewoon de bron opnieuw aanroept.

Hoe lang kan ik data in de cache bewaren?

Maximaal 21600 seconden, dat is 6 uur. De minimale bewaartijd is 1 seconde en de standaard is 600 seconden (10 minuten). Waarden kunnen eerder vervallen als de cache vol raakt.

Is de cache persistent bij server-herstarts?

Nee, de cache is vluchtig. Als de Google-infrastructuur de cache leegt, retourneert cache.get() de waarde null. Schrijf je code daarom altijd zo dat een cache miss netjes wordt afgehandeld.

Kan ik binaire data cachen?

Nee, alleen strings. Codeer binaire data eerst met Utilities.base64Encode() en decodeer het bij ophalen met Utilities.base64Decode(). Let op de limiet van 100 KB per sleutel.

Wat is het verschil tussen Cache Service en Properties Service?

Properties Service is persistent en blijft altijd bestaan, terwijl Cache Service tijdelijk maar sneller is. Gebruik Properties voor configuratie en geheimen, en Cache voor tijdelijke prestatieoptimalisatie.

Welk cache-type moet ik kiezen?

Gebruik de script cache voor data die voor alle gebruikers hetzelfde is, de document cache voor data die bij een specifiek document hoort, en de user cache voor persoonlijke of gevoelige data per gebruiker.

Hoeveel sleutels kan ik bewaren?

De Cache Service is bedoeld voor snelle, beperkte opslag en niet als database. Houd de sleutels en waarden compact, want elke waarde mag maximaal 100 KB groot zijn en oude items kunnen worden verdrongen wanneer de cache vol is.

De Cache Service is een eenvoudige maar krachtige tool om quota-verbruik te verminderen en scripts sneller te maken. Combineer het met PropertiesService voor een gelaagde caching-strategie die zowel snel als betrouwbaar is.