L’utilizzo di database in-memory come Memcached e Redis ha reso possibile un notevole aumento delle pre­sta­zio­ni di ap­pli­ca­zio­ni dinamiche e dai requisiti elevati che lavorano con le banche di dati. Entrambe le soluzioni sono open source e lavorano secondo principi simili. È so­prat­tut­to quando si prendono in esame le ca­rat­te­ri­sti­che e le aree di utilizzo dell’una e dell’altra cache, però, che risultano evidenti alcune im­por­tan­ti dif­fe­ren­ze che è bene conoscere in anticipo.

Mentre Memcached si concentra prin­ci­pal­men­te sulla sem­pli­ci­tà, Redis offre una vasta gamma di funzioni ag­giun­ti­ve che possono essere utili o superflue a seconda dei casi. Vediamo quali ca­rat­te­ri­sti­che ac­co­mu­na­no questi due database in-memory e per quali aspetti dif­fe­ri­sco­no mag­gior­men­te l’uno dall’altro.

Memcached e Redis: un cenno in­tro­dut­ti­vo

Mentre Memcached è in uso da quasi 20 anni, Redis è arrivato sul mercato circa sette anni dopo. L’intento degli svi­lup­pa­to­ri di Memcached, all’epoca, era quello di bypassare i lunghi tempi di accesso ai database, ine­vi­ta­bi­li quando si uti­liz­za­no ap­pli­ca­zio­ni web so­fi­sti­ca­te. E l’obiettivo è stato raggiunto: il servizio di cache in memoria (Memcached) rende gli elementi della cache di­spo­ni­bi­li alla velocità della luce uti­liz­zan­do valori chiave, rendendo in tal modo superfluo l’accesso al disco rigido. Il database in-memory Redis, ab­bre­via­zio­ne di Remote Dic­tio­na­ry Server, è basato su una struttura chiave-valore simile e, come Memcached, è usato in aree come web, gaming ed e-commerce.

Quali sono le ca­rat­te­ri­sti­che in comune?

I database in-memory di Memcached e Redis con­sen­to­no una lettura dei dati a una velocità molto elevata, il che permette un tempo di risposta nell’ordine del mil­li­se­con­do. Entrambi i sistemi sono sin­tat­ti­ca­men­te semplici da usare e possono essere integrati in un’ap­pli­ca­zio­ne senza dover ricorrere a codici complessi. Inoltre, Memcached e Redis per­met­to­no di dividere i dati su più nodi, sem­pli­fi­can­do la sca­la­bi­li­tà al crescere della quantità di dati. Entrambe le soluzioni open source sup­por­ta­no inoltre una vasta gamma di pro­to­col­li e linguaggi di pro­gram­ma­zio­ne come Java, Python, PHP, C, C++, C#, Ja­va­Script, Node.js, Ruby, Go.

Memcached vs. Redis: quali sono le dif­fe­ren­ze?

Anche se Mem­cha­ched e Redis sono per molti aspetti simili, vi sono alcune dif­fe­ren­ze. L’elenco che segue ne mostra le più im­por­tan­ti.

Ar­chi­tet­tu­ra: Memcached funziona sul principio del multi-thread ed è quindi in grado di uti­liz­za­re più core di processo con­tem­po­ra­nea­men­te. Redis utilizza uni­ca­men­te un singolo core, cosa che gli permette di offrire pre­sta­zio­ni migliori lavorando con quantità di dati contenute. Se si tratta di me­mo­riz­za­re 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 com­ples­si­tà come liste, hash, flussi, insiemi, insiemi ordinati, bitmap e Hy­per­Lo­gLogs. Inoltre, Redis è in grado di misurare e me­mo­riz­za­re dati geo­gra­fi­ci.

Per­si­sten­za 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 au­to­ma­ti­ca­men­te rimossi. I dati vanno persi anche nel caso in cui un’istanza di Memcached non funziona cor­ret­ta­men­te. In Redis, i dati vengono re­cu­pe­ra­ti uti­liz­zan­do la funzione snapshot “point-in-time” o la modalità AOF (Append Only File). Tuttavia, in quest’ultima modalità, le pre­sta­zio­ni possono ral­len­ta­re leg­ger­men­te.

Gestione del cluster: Redis non opera una con­di­vi­sio­ne dei dati uni­ca­men­te sul lato client, come avviene in Memcached, ma anche sul lato server. I nodi del cluster Redis possono scambiare dati tra loro. Il mal­fun­zio­na­men­to di un sot­toin­sie­me di nodi si ri­per­cuo­te pertanto in misura nulla o appena per­cet­ti­bi­le sui tempi di risposta. Al contrario, in Memcached un simile scambio di dati non è possibile.

Tran­sa­zio­ni: entrambi i sistemi in-memory uti­liz­za­no istru­zio­ni atomiche, vale a dire che i valori inseriti vengono vi­sua­liz­za­ti senza ritardo sul lato client. Di­ver­sa­men­te da Memcached, tuttavia, Redis permette anche di eseguire i comandi di gruppo sotto forma di processi atomici isolati. Questa ca­rat­te­ri­sti­ca di Redis è chiamata pi­pe­li­ning e consente a Redis di fornire una risposta a più comandi con­tem­po­ra­nea­men­te.

Pub/Sub: Redis supporta l’ar­chi­tet­tu­ra pub/sub. Il modello di mes­sag­gi­sti­ca permette alle ap­pli­ca­zio­ni di co­mu­ni­ca­re tra loro in modo ef­fi­cien­te. Questa ca­rat­te­ri­sti­ca è uti­liz­za­ta nelle chat room ad alte pre­sta­zio­ni, nella co­mu­ni­ca­zio­ne streaming live, nei feed dei social media e nella co­mu­ni­ca­zio­ne tra diversi server.

Lua: Redis supporta la libreria Lua per l’ese­cu­zio­ne di calcoli complessi. Lo script di Redis permette di im­ple­men­ta­re con poco sforzo una logica nuova, au­men­tan­do le pre­sta­zio­ni e sem­pli­fi­can­do l’utilizzo.

Memcached vs. Redis: so­mi­glian­ze e diversità a confronto

Memcached Redis
Facile da in­stal­la­re e uti­liz­za­re Facile da in­stal­la­re e uti­liz­za­re
In­ter­val­lo di latenza nell’ordine del mil­li­se­con­do In­ter­val­lo di latenza nell’ordine del mil­li­se­con­do
Open source e com­pa­ti­bi­le con i linguaggi di pro­gram­ma­zio­ne più diffusi Open source e com­pa­ti­bi­le con i linguaggi di pro­gram­ma­zio­ne più diffusi
Motore multi-thread, ideale per grandi quantità di dati Motore single-thread, ideale per piccole quantità di dati
Sca­la­bi­li­tà verticale Sca­la­bi­li­tà verticale e oriz­zon­ta­le (vedi gestione dei cluster)
Lunghezza della chiave limitata a 250 caratteri (1 MB) Supporto per molti tipi di dati (fino a 512 MB)
Nessuna per­si­sten­za dei dati o mal­fun­zio­na­men­to dato che si tratta di un semplice archivio in-memory Ri­pri­sti­no dei dati tramite snapshot, AOF e me­mo­riz­za­zio­ne su disco di backup
Ideale per il caching e la me­mo­riz­za­zio­ne delle sessioni Ideale per processi complessi e procedure multiple da eseguire si­mul­ta­nea­men­te

Con­clu­sio­ne

Memcached e Redis sono entrambi database in-memory so­fi­sti­ca­ti che dif­fe­ri­sco­no prin­ci­pal­men­te in termini di formati di dati sup­por­ta­ti, gestione del cluster, della memoria e per­si­sten­za dei dati. Quale dei due motori sia la scelta migliore dipende dal relativo utilizzo. Se usate già Memcached e non ne­ces­si­ta­te di ca­rat­te­ri­sti­che ag­giun­ti­ve, allora potrebbe non valere la pena passare a Redis. Tuttavia, se avete bisogno di più funzioni e volete pro­teg­ge­re meglio i dati, Redis è una buona al­ter­na­ti­va.

Vai al menu prin­ci­pa­le