2009-02-13 4 views
8

È possibile condividere una singola istanza di Memcache tra più progetti.Condivisione Memcache

Supponiamo che spinga un oggetto all'interno della memcache in un progetto, è possibile che io recuperi lo stesso oggetto da un progetto diverso. ?

risposta

14

Memcache è solo un archivio di memoria. Può essere eseguito su più macchine. Non c'è motivo per cui due processi completamente diversi non possano parlarsi l'un l'altro.

Mi permetta di chiarire. È possibile eseguire memcache su uno o più server. È possibile configurare i client per parlare con un insieme specifico di istanze. È possibile eseguire due (o più) processi di memcache diversi sullo stesso host (ascoltando diversi indirizzi IP e/o porte) e sono completamente indipendenti.

Se le tue due applicazioni parlano alla stessa istanza, non c'è motivo per cui non possano comunicare.

La complicazione arriva se si parla di più istanze e si partiziona i dati (ovvero li si divide in diverse istanze), quindi i client devono sapere in quale istanza ottenere i dati o inserire i dati. Se stai usando la stessa libreria client (ad esempio entrambi i tuoi client sono PHP5), allora non è un dramma. Se non sono la stessa cosa, devi gestire il problema in qualche modo.

L'altro problema se si utilizzano tecnologie diverse è che si deve pensare al formato di interscambio poiché la serializzazione personalizzata in PHP non sarà così leggibile in Java o C#. Le scelte tipiche sono XML o anche JSON.

+0

Ho completamente letto male la domanda, grazie per averlo indicato :) –

4

Sì, finché ciascun progetto configura i nodi memcache nello stesso modo e genera una chiave per un elemento cache nello stesso modo, è possibile condividere i dati.

0

Se si è preoccupati per problemi di sicurezza (un'app che legge i dati di un altro) o di avvelenamento della cache tra le applicazioni, queste sono le possibilità.

Se si desidera isolare memcache tra le applicazioni, è possibile eseguire più daemon memcached su un singolo server, ciascuno dei quali utilizza una parte della memoria del server. Ogni istanza viene eseguita su un numero di porta diverso. È possibile utilizzare le regole del firewall per garantire che solo specifici server di applicazioni abbiano accesso a specifiche porte memcache per garantire che le applicazioni non possano leggere o avvelenare i dati altrui.

0

Per ciascun progetto, fornirei un metodo per generare chiavi e progetti di partizione per spazio dei nomi. Quindi per key = foo dal progetto B, viene memorizzato/recuperato da A.foo, e foo dal progetto B si chiama B.foo ecc.

In questo modo dovrebbe funzionare. Tuttavia, quando si arriva alla produzione, questo approccio è molto scoraggiante, dal momento che si può essere in fase di debug (prestazioni/affidabilità, ecc.).

Il modo migliore è avere più istanze di memcache in esecuzione su porte diverse, questo è IMHO più pulito.