Memcached vs. Redis: due database in-memory a confronto

L’utilizzo di database in-memory come Memcached e Redis ha reso possibile un notevole aumento delle prestazioni di applicazioni dinamiche e dai requisiti elevati che lavorano con le banche di dati. Entrambe le soluzioni sono open source e lavorano secondo principi simili. È soprattutto quando si prendono in esame le caratteristiche e le aree di utilizzo dell’una e dell’altra cache, però, che risultano evidenti alcune importanti differenze che è bene conoscere in anticipo.

Mentre Memcached si concentra principalmente sulla semplicità, Redis offre una vasta gamma di funzioni aggiuntive che possono essere utili o superflue a seconda dei casi. Vediamo quali caratteristiche accomunano questi due database in-memory e per quali aspetti differiscono maggiormente l’uno dall’altro.

Memcached e Redis: un cenno introduttivo

Mentre Memcached è in uso da quasi 20 anni, Redis è arrivato sul mercato circa sette anni dopo. L’intento degli sviluppatori di Memcached, all’epoca, era quello di bypassare i lunghi tempi di accesso ai database, inevitabili quando si utilizzano applicazioni web sofisticate. E l’obiettivo è stato raggiunto: il servizio di cache in memoria (Memcached) rende gli elementi della cache disponibili alla velocità della luce utilizzando valori chiave, rendendo in tal modo superfluo l’accesso al disco rigido. Il database in-memory Redis, abbreviazione di Remote Dictionary Server, è basato su una struttura chiave-valore simile e, come Memcached, è usato in aree come web, gaming ed e-commerce.

Quali sono le caratteristiche in comune?

I database in-memory di Memcached e Redis consentono una lettura dei dati a una velocità molto elevata, il che permette un tempo di risposta nell’ordine del millisecondo. Entrambi i sistemi sono sintatticamente semplici da usare e possono essere integrati in un’applicazione senza dover ricorrere a codici complessi. Inoltre, Memcached e Redis permettono di dividere i dati su più nodi, semplificando la scalabilità al crescere della quantità di dati. Entrambe le soluzioni open source supportano inoltre una vasta gamma di protocolli e linguaggi di programmazione come Java, Python, PHP, C, C++, C#, JavaScript, Node.js, Ruby, Go.

Memcached vs. Redis: quali sono le differenze?

Anche se Memchached e Redis sono per molti aspetti simili, vi sono alcune differenze. L’elenco che segue ne mostra le più importanti.

Architettura: Memcached funziona sul principio del multi-thread ed è quindi in grado di utilizzare più core di processo contemporaneamente. Redis utilizza unicamente un singolo core, cosa che gli permette di offrire prestazioni migliori lavorando con quantità di dati contenute. Se si tratta di memorizzare quantità di dati molto grandi, tuttavia, Memcached è in vantaggio.

Tipi di dati: Memcached è in grado di gestire solo stringhe semplici o fino a 1 MB. Redis, dal canto suo, supporta stringhe fino a 512 MB oltre a strutture di dati di maggiore complessità come liste, hash, flussi, insiemi, insiemi ordinati, bitmap e HyperLogLogs. Inoltre, Redis è in grado di misurare e memorizzare dati geografici.

Persistenza dei dati: Redis non è un sistema in-memory puro come Memcached. Quando non c’è più spazio per nuovi elementi nel server Memcached, i dati meno richiesti vengono automaticamente rimossi. I dati vanno persi anche nel caso in cui un’istanza di Memcached non funziona correttamente. In Redis, i dati vengono recuperati utilizzando la funzione snapshot “point-in-time” o la modalità AOF (Append Only File). Tuttavia, in quest’ultima modalità, le prestazioni possono rallentare leggermente.

Gestione del cluster: Redis non opera una condivisione dei dati unicamente sul lato client, come avviene in Memcached, ma anche sul lato server. I nodi del cluster Redis possono scambiare dati tra loro. Il malfunzionamento di un sottoinsieme di nodi si ripercuote pertanto in misura nulla o appena percettibile sui tempi di risposta. Al contrario, in Memcached un simile scambio di dati non è possibile.

Transazioni: entrambi i sistemi in-memory utilizzano istruzioni atomiche, vale a dire che i valori inseriti vengono visualizzati senza ritardo sul lato client. Diversamente da Memcached, tuttavia, Redis permette anche di eseguire i comandi di gruppo sotto forma di processi atomici isolati. Questa caratteristica di Redis è chiamata pipelining e consente a Redis di fornire una risposta a più comandi contemporaneamente.

Pub/Sub: Redis supporta l’architettura pub/sub. Il modello di messaggistica permette alle applicazioni di comunicare tra loro in modo efficiente. Questa caratteristica è utilizzata nelle chat room ad alte prestazioni, nella comunicazione streaming live, nei feed dei social media e nella comunicazione tra diversi server.

Lua: Redis supporta la libreria Lua per l’esecuzione di calcoli complessi. Lo script di Redis permette di implementare con poco sforzo una logica nuova, aumentando le prestazioni e semplificando l’utilizzo.

Memcached vs. Redis: somiglianze e diversità a confronto

Memcached Redis
Facile da installare e utilizzare Facile da installare e utilizzare
Intervallo di latenza nell’ordine del millisecondo Intervallo di latenza nell’ordine del millisecondo
Open source e compatibile con i linguaggi di programmazione più diffusi Open source e compatibile con i linguaggi di programmazione più diffusi
Motore multi-thread, ideale per grandi quantità di dati Motore single-thread, ideale per piccole quantità di dati
Scalabilità verticale Scalabilità verticale e orizzontale (vedi gestione dei cluster)
Lunghezza della chiave limitata a 250 caratteri (1 MB) Supporto per molti tipi di dati (fino a 512 MB)
Nessuna persistenza dei dati o malfunzionamento dato che si tratta di un semplice archivio in-memory Ripristino dei dati tramite snapshot, AOF e memorizzazione su disco di backup
Ideale per il caching e la memorizzazione delle sessioni Ideale per processi complessi e procedure multiple da eseguire simultaneamente

Conclusione

Memcached e Redis sono entrambi database in-memory sofisticati che differiscono principalmente in termini di formati di dati supportati, gestione del cluster, della memoria e persistenza dei dati. Quale dei due motori sia la scelta migliore dipende dal relativo utilizzo. Se usate già Memcached e non necessitate di caratteristiche aggiuntive, allora potrebbe non valere la pena passare a Redis. Tuttavia, se avete bisogno di più funzioni e volete proteggere meglio i dati, Redis è una buona alternativa.


Abbiamo una proposta per te:
Web hosting a partire da 1 €/mese!

Dominio gratis
Certificato SSL Wildcard incluso
Assistenza clienti 24/7
A partire da 1 €/mese IVA escl. per un anno,
poi 8 €/ mese IVA escl.