====== Request Cache ====== ===== Übersicht ===== Ziel ist es, zu vermeiden, dass identische Anfragen mehrmals beantwortet werden, also Rechenzeit verschwendet wird. Hier gilt es zwei Fälle zu unterscheiden: Erstens, Anfragen die nicht an einen Nutzer gebunden gebunden sind und zweitens, Anfragen die präferenz-gestützt sind. Im ersten Fall werden die Rückgaben nicht von Modellparametern beeinflusst und sind wiederverwendbar. Für den zweiten Fall ist es nicht möglich, die Resultate einer Anfrage wiederzuverwenden, da die Parameter sich für zwei Nutzer unterschieden und so eine Anpassung der Resultate notwendig sind. Deshalb dient der Cache nur zur Speicherung “normaler” Anfragen. Aufgrund von dem Parameter “limit” ist es notwendig, im Cache immer die gesamte Liste der sortierten Rückgaben zu speichern. Da Kategorien beliebig groß sein können, ist es wichtig, Daten effizient im Cache zu speichern. Dies ist auch notwendig, da ein Transfer sonst länger dauert als ein Lookup im Cache. In beiden Fällen sind alle Werte zu invalidieren, falls ein Kunde seinen Feed aktualisiert hat, da ggf. Produkte nicht mehr existieren, oder neue Produkte zu einer Kategorie hinzugefügt wurden. Alternativ kann eine TTL pro Anfrage gesetzt werden, so das alte Objekte automatisch invalidiert werden. ===== Interface ===== Abrufen einer Anfrage ''%%RequestCache.get(Kunden_ID, Produkt_ID_ID)%%'' Testen ob eine Anfrage existiert ''%%RequestCache.contains(Kunden_ID, Produkt_ID)%%'' Hinzufügen einer Anfrage ''%%RequestCache.set(Kunden_ID, Produkt_ID, Ergebnis_Liste, ttl=unlimited)%%''