Abbiamo una build Webservice REST con Symfony3 e PHP7. L'applicazione è servita tramite Nginx e PHP-FPM.
Il servizio Web restituisce un elenco di prodotti. I prodotti all'interno dell'elenco sono filtrati per attributi. Il risultato sarebbe l'elenco con un sottoinsieme dei suoi prodotti, filtrato per attributi. Questi attributi vengono inviati tramite i parametri GET nell'URL. Per ora ci sono 4 parametri che generano circa 1 milione di combinazioni di Url per prodotto. I dati del prodotto cambiano costantemente.
Elenco di esempi prima del filtro:
{
name: "list1",
products: [
{
name: "product1"
},
{
name: "product2"
]
}
Elenco di esempio dopo il filtraggio:
{
name: "list1",
products: [
{
name: "product2"
]
}
Esempio di risorsa API: /list?slug=list1&filter1=foo&filter2=bar&filter3=baz
Per migliorare le prestazioni, desideriamo memorizzare nella cache le richieste con Nginx fastcgi_cache. La risposta verrebbe memorizzata nella cache con una chiave cache uguale all'URL della richiesta.
Quando archiviamo le risposte per 1 ora, è necessario invalidare le voci della cache quando i dati di un prodotto cambiano. Quindi dobbiamo invalidare tutte le voci della cache che includono quel prodotto.
Quindi quello che potrei fare è che potrei scoprire tutte le liste che includono il prodotto. E poi crea ogni combinazione di filtri e crea tutti gli URL possibili per la lista. Quindi annulla le voci.
Penso che sarebbero necessarie molte risorse per invalidare / aggiornare la cache.
Come eseguire correttamente la cache e invalidare correttamente la cache in tali situazioni?
Domanda simile senza risposta L'elaborazione / filtraggio deve essere eseguita lato client o lato server per le applicazioni basate su catalogo