Domanda

Al momento sto implementando un servizio REST web utilizzando CouchDB e Restlet. Lo strato Restlet è principalmente per l'autenticazione e alcuni minori filtraggio dei dati JSON servita da CouchDB:

Clienti <= HTTP => [Restlet <= HTTP => CouchDB]

sto usando CouchDB anche ai dati di login archivio utenti, perché io non voglio aggiungere un server di database aggiuntivo a tale scopo. Così, ogni richiesta al mio servizio fa sì che due CouchDB richieste condotta da Restlet (autenticazione di dati + richiesta "reale"). Al fine di mantenere il servizio come efficiente possibile, voglio ridurre il numero di richieste, in questo caso ridondanti richieste di dati di accesso.

La mia idea è ora quella di fornire una cache (i.e.LRU-Cache tramite LinkedHashMap) all'interno della mia applicazione Restlet che le cache dei dati di accesso, perché HTTP caching probabily non essere sufficiente. Ma come faccio a invalidare i dati della cache, una volta che un utente cambia la password, per esempio. Grazie a riposare, l'applicazione potrebbe funzionare su più server in parallelo, e non voglio creare un'istanza centrale solo per i dati della cache di accesso.

Al momento, risparmio chiesto i dati auth nella cache e cerco di autenticarsi nuove richieste usandoli. Se l'autenticazione non riesce o non v'è ormai entrata a disposizione, ti invio una richiesta GET al mio stoccaggio CouchDB al fine di ottenere i dati effettivi di autenticazione. Quindi, in un caso peggiore, gli utenti che hanno cambiato i loro dati saranno forse ancora in grado di effettuare il login con i loro vecchi credenziali. Come posso fare con questo?

O che cosa è una strategia buona per mantenere la cache (s) up-to-date in generale?

Grazie in anticipo.

È stato utile?

Soluzione

A me sembra che sei cresciuto abbastanza da usare qualche soluzione cache "professionale" (ad esempio, EHCache ). Tutte le cache distribuite permettono nuova replica dei dati e invalidazione tra i diversi nodi in modo che il problema è già risolto.

Altri suggerimenti

Un distribuito cache in memoria come memcached potrebbe essere quello che state cercando. È possibile configurare l'età dell'oggetto, delle dimensioni della cache ed esporre anche le richiamate per rimuovere oggetti specifici dalla cache (come quando l'informazione è stantio).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top