Sto implementando la struttura della cache usando Redis, il mio dominio è così:
- Esistono più categorie (oltre 3000 categorie). Ogni categoria contiene più domande (circa 20-30 domande per categoria). Ogni domanda ha diverse proprietà come se è stata pubblicata, qual è il tipo, ecc.
- Durante il caricamento delle domande, ho bisogno di caricare domande da diverse categorie e con alcuni filer di domande specificate dall'utente che corrispondono alle proprietà delle domande: è pubblicato, digita, ecc.
- Lo implemento in Redis usando string e set:
- Ogni domanda viene memorizzata come stringa in Redis (JSON serializzato) con la chiave: "domanda: [QuestionId]"
- Ogni categoria ha un elenco di ID di domande ad esso appartenenti (insieme Redis) con la chiave: "categoria: [ID categoria]: domande"
- Per ogni categoria, ogni proprietà filtrabile per utente ha il proprio set di ID domanda (Redis set) ad es. le domande pubblicate nella categoria 1 hanno la chiave: "categoria: 1: domande: pubblicate
- Quando carichi le domande, ho solo bisogno di basarmi sui filtri forniti dall'utente, fare l'intersezione del set in Redis per trovare gli id delle domande rilevanti e caricare quelle domande
- Quindi ogni categoria avrà diversi elementi della cache associati:
- Categoria: [CategoryId]: domande
- Categoria: [CategoryId]: domande: isPublished
- Categoria: [CategoryId]: domande: notpublished
- Categoria: [CategoryId]: domande: Tipo: 1
- Categoria: [CategoryId]: domande: Tipo: 2 etc
Funziona bene. Ma la sfida è mantenere la coerenza degli elementi della cache quando c'è sfratto. Diciamo che se la cache di Redis decide di sfrattare " categoria: [CategoryId]: domande: notpublished " elemento della cache, come faccio a essere sicuro che anche tutti gli altri elementi della cache relativi all'id della categoria vengano invalidati? Posso controllare tutti gli elementi della cache dei filtri per assicurarmi che esistano nella cache prima di caricare le domande, ma ciò richiederà molte richieste a Redis. O qualsiasi altra strategia / modo per risolvere il mio problema? Sono nuovo di Redis e questa è la prima volta che implemento questo tipo di struttura della cache in Redis
Al momento quello che faccio è controllare la chiave " category: [CategoryId]: questions ". Se non esiste, caricare i dati dal database e impostare tutti gli elementi della cache per quella categoria. Ma non può rilevare se mancano altri tasti