Memcached gegen Redis

1. Übersicht

In diesem Artikel untersuchen wir die Ähnlichkeiten und Unterschiede zweier beliebter In-Memory-Datenbanken, Memcached und Redis.

2. Memcached und Redis

Oft denken wir an Caching, um die Leistung bei der Verarbeitung einer großen Datenmenge zu verbessern.

Memcached ist ein verteiltes Speicher-Caching-System, das auf Benutzerfreundlichkeit und Einfachheit ausgelegt ist und sich gut als Cache oder Sitzungsspeicher eignet .

Redis ist ein speicherinterner Datenstrukturspeicher, der eine Vielzahl von Funktionen bietet. Es ist nützlich als Cache, Datenbank, Nachrichtenbroker und Warteschlange .

3. Installation

3.1. Memcached installieren

Wir können den neuesten Memcached-Server installieren, indem wir das Paket herunterladen und make ausführen :

$ wget //memcached.org/latest $ tar -zxvf memcached-1.6.3.tar.gz $ cd memcached-1.6.3 $ ./configure && make && make test && sudo make install

3.2. Redis installieren

Ebenso können wir den neuesten Redis-Server installieren:

$ wget //download.redis.io/releases/redis-5.0.8.tar.gz $ tar xzf redis-5.0.8.tar.gz $ cd redis-5.0.8 $ make

4. Ähnlichkeiten

4.1. Sub-Millisekunden-Latenz

Sowohl Memcached als auch Redis bieten Antwortzeiten von weniger als einer Millisekunde, indem Daten im Speicher gehalten werden.

4.2. Datenpartitionierung

In ähnlicher Weise ermöglichen beide speicherinternen Datenbanken die Verteilung von Daten auf mehrere Knoten.

4.3. Unterstützung für Programmiersprachen

Ebenso unterstützen beide alle wichtigen Programmiersprachen, einschließlich Java, Python, JavaScript, C und Ruby.

Darüber hinaus stehen einige Java-Clients für beide In-Memory-Datenbanken zur Verfügung. Zum Beispiel sind Xmemcached und Memcached-Java-Client für Memcached verfügbar, während Jedis, Lettuce und Redisson für Redis verfügbar sind.

4.4. Cache löschen

Mit Memcached kann der Cache mit dem Befehl flush_all geleert werden . In ähnlicher Weise können wir mit Redis alles mit Befehlen wie FLUSHDB und FLUSHALL aus einem Cache löschen .

4.5. Skalierung

Beide Caching-Lösungen bieten eine hohe Skalierbarkeit für die Verarbeitung großer Datenmengen, wenn die Nachfrage exponentiell steigt.

5. Unterschiede

5.1. Befehlszeile

Mit Memcached können wir Befehle ausführen, indem wir über Telnet eine Verbindung zum Server herstellen :

$ telnet 10.2.3.4 5678 Trying 10.2.3.4... Connected to 10.2.3.4. 
$ stats STAT pid 14868 STAT uptime 175931 STAT time 1220540125 // ...

Im Gegensatz zu Memcached verfügt Redis über eine dedizierte Befehlszeilenschnittstelle, redis-cli , mit der wir Befehle ausführen können:

$ redis-cli COMMAND 1) 1) "save" 2) (integer) 1 3) 1) "admin" 2) "noscript" // ... 2) 1) "multi" 2) (integer) 1 3) 1) "noscript" 2) "fast" // ... 3) 1) "geodist" 2) (integer) -4 3) 1) "readonly" // ... // ...

Hier haben wir COMMAND ausgeführt, um alle von Redis bereitgestellten Befehle aufzulisten .

5.2. Festplatten-E / A-Dumping

Memcached behandelt das Disk-Dumping nur mit Tools von Drittanbietern wie libmemcached-tools oder Gabeln wie memcached-dd.

Redis bietet jedoch hoch konfigurierbare Standardmechanismen wie RDB (Redis-Datenbankdatei) oder AOF (Nur Anhängen) für das Festplatten-Dumping. Dies kann für die Archivierung und Wiederherstellung hilfreich sein.

Mit redis-cli können wir den synchronen SAVE- Befehl ausführen , um eine Momentaufnahme der speicherinternen Daten zu erstellen:

$ redis-cli SAVE OK

Hier speichert der Befehl den Snapshot in einer Binärdatei dump.rdb und gibt nach Abschluss den Status OK zurück .

Die Ausführung des asynchronen BGSAVE startet jedoch den Hintergrundprozess für die Erstellung eines Snapshots:

$ redis-cli BGSAVE OK

Darüber hinaus können wir mit dem Befehl LASTSAVE die Unix-Zeit des letzten erfolgreichen DB-Snapshots überprüfen.

$ redis-cli LASTSAVE (integer) 1410853592

5.3. Datenstrukturen

Memcached speichert Schlüssel-Wert-Paare als Zeichenfolge und hat eine Größenbeschränkung von 1 MB pro Wert. Jedoch unterstützen Redis auch andere Datenstrukturen wie die Liste, gesetzt, und Hash und Werte von bis zu 512 MB in Größe speichern können .

5.4. Reproduzieren

Memcached unterstützt die Replikation mit Gabeln von Drittanbietern wie repcached.

Im Gegensatz zu Memcached bietet Redis Funktionen zum Multiplizieren von Clustern durch Replizieren des Primärspeichers für eine bessere Skalierbarkeit und hohe Verfügbarkeit.

Zunächst können wir mit dem Befehl REPLICAOF ein Replikat des Redis-Masterservers erstellen. Als Nächstes führen wir den PSYNC- Befehl auf dem Replikat aus, um die Replikation vom Master aus zu initiieren.

5.5. Transaktionen

Memcached unterstützt keine Transaktionen, obwohl seine Operationen atomar sind.

Redis provides out-of-the-box support for transactions to execute commands.

We can start the transaction using the MULTI command. Then, we can use the EXEC command for the execution of the following subsequent commands. Finally, Redis provides the WATCH command for the conditional execution of the transaction.

5.6. Publish and Subscribe Messaging

Memcached doesn't support publish/subscribe messaging out-of-the-box.

Redis, on the other hand, provides functionality to publish and subscribe to messages using pub/sub message queues.

This can be useful when designing applications that require real-time communication like chat rooms, social media feeds, and server intercommunication.

Redis comes with dedicated commands like PUBLISH,SUBSCRIBE, and UNSUBSCRIBE to publish a message to the channel, subscribe, and unsubscribe the client to the specified channels, respectively.

5.7. Geospatial Support

Geospatial support is useful for implementing location-based features for our applications. Unlike Memcached, Redis comes with special commands to manage real-time geospatial data.

For instance, the GEODIST command calculates the distance between two geospatial entries. Likewise, the GEORADIUS command returns all the entries within the radius provided.

Additionally, we can use Spring Data Redis to enable Redis geospatial support in a Java application.

5.8. Architecture

Redis uses a single core and shows better performance than Memcached in storing small datasets when measured in terms of cores.

Memcached implements a multi-threaded architecture by utilizing multiple cores. Therefore, for storing larger datasets, Memcached can perform better than Redis.

Another benefit of Memcached's multi-threaded architecture is its high scalability, achieved by utilizing multiple computational resources.

Redis can scale horizontally via clustering, which is comparatively more complex to set up and operate. Also, we can use Jedis or Lettuce to enable a Redis cluster using a Java application.

5.9. LUA Scripting

In contrast to Memcached, we can execute LUA scripts against Redis. It provides commands like EVAL and SCRIPT LOAD, useful for the execution of the LUA scripts.

For instance, we can execute the EVAL command to evaluate the script:

$ redis-cli eval "return redis.call('set',KEYS[1],'baeldung')" 1 website OK

Here, we've set the key website to the value baeldung by evaluating a script.

5.10. Memory Usage

Memcached has a higher memory utilization rate than Redis when comparing the String data structure.

In spite of that, when Redis uses the hash structure, it provides a higher memory utilization rate than Memcached.

6. Conclusion

In diesem Artikel haben wir Memcached und Redis untersucht. Zunächst haben wir uns die Ähnlichkeiten beider In-Memory-Datenbanken angesehen. Anschließend haben wir uns die Unterschiede in den Funktionen der beiden Caching-Lösungen angesehen.

Es gibt viele In-Memory-Caching-Lösungen. Daher sollten wir die Funktionen einer Caching-Engine berücksichtigen und sie mit unseren Anwendungsfällen abgleichen.

Wir können mit Sicherheit den Schluss ziehen, dass Memcached eine gute Wahl für die Lösung einfacher Caching-Probleme ist. Im Allgemeinen übertrifft Redis Memcached jedoch durch eine umfassendere Funktionalität und verschiedene Funktionen, die für komplexe Anwendungsfälle vielversprechend sind.