Redis vs Memcache

N3X

New Member
Tagchen Leute,
ich hoffe ich habe hier einmal die richtige Sektion für meine Frage gefunden.
Eigentlich eher nichts großartiges.

Ich bin gerade dabei eine Anwendungen zu entwickeln. Allerdings möchte ich mir gerne für einige API-Requests die teilweise langen Wartezeiten für selten ändernde Responses sparen, wie aber auch Inhalte aus einer SQL-Datenbank.

Daher möchte ich in diesem Zusammenhang diese Inhalte in einer In-Memory-Datenbank speichern. Dabei kann ich mich nicht so recht entscheiden, was wohl am sinnvollsten wäre für Performance und Skalierbarkeit zu verwenden.
Einen Redis-Server oder doch lieber Memcache?

Was sind die Vor- und Nachteile der beiden Datenbanken?
Hauptsächlich werde ich in diesem Zusammenhang AVPs cachen.
 
Da ich bereits eine große App mit Hilfe von Memcached verbessert habe, kurz meine Meinung:
Von der Performance her ist nach meinen Tests der Memcached schneller.
Ist auch klar, weil Redis viel mehr "Drumherum" mit liefert als Memcached. Sowas geht immer auf die Kosten der Performance.

Bei Redis hast Du halt viel mehr Datenstrukturen und verschiedene Setter und Getter. Das ist in Memcached alles nicht. Hier gibt es nur SET, GET, DEL, INC, DEC und FLUSHALL.

Was mich bei Memcached stört, ist dass es keinerlei User-Rechte gibt. So muss man echt vorsichtig sein, wenn man mehrere Apps auf dem selben Memcached laufen lässt. Insbesondere wenn es eine Live- und Test-Instanz auf dem selben Server gibt. Am Einfachsten zu lösen ist es mit unterschiedlichen Key-Prefixes. Aber auch eine zweite Memcached-Instanz wäre eine Möglichkeit.

Beide können Folgendes nicht:
Löschen über Keys mit Like um mehrere Keys in einem Rutsch zu löschen. (Z.B. "DEL LIKE ID_123_%".)
Auch eine Liste aller Keys kann keine von Beiden liefern.

Somit viel meine Wahl damals auf Memcached.

huschi.
 
Moin erst einmal danke für die Antwort.

Weißt du ggf. wie es bei Redis damit aussieht, wenn "kleinere" Objekte gecached werden würden? Soweit ich in der Redis-Doku gesehen habe, soll es wohl auch möglich sein diese zu hinterlegen.

Das beide nicht dazu in der Lage sind, mittels likes Datensätze zu finden bzw. zu löschen, stört mich keineswegs. Habe ich auch in der Form nicht geplant, da ich nur Inhalte cachen möchte die ich quasi bei jedem Request auf die Webseite benötige (und das löschen in erster Linie erst einmal nicht notwendig ist), sobald ein User eingeloggt ist und sich innerhalb seines Bereiches auf einer Webseite befindet. Daher würde ich auch eigentlich eher nur Inhalte überschreiben wollen, oder nächtlich mittels eines Cronjobs zu einem bestimmten Ereignis die Datensätze die auf dem anderen System nicht mehr gegeben sein könnten, löschen. (wirrer satz grr...)


Naja und wie sieht es aus mit der Skalierbarkeit beider? Nehmen wir an, ich möchte eines Tages die Infrastruktur aufbessern und würde für eine größere Anwendung die Caching-Server clustern/redundanz wollen? Was käme dann in Frage.
(theoretische Frage -> Zukunftsorientiert)
 
Weißt du ggf. wie es bei Redis damit aussieht, wenn "kleinere" Objekte gecached werden würden?
Falls Du mit "Objekte" Klasseninstanzen meinst, so ist dies über Serialisierung in Beiden möglich.

Naja und wie sieht es aus mit der Skalierbarkeit beider?
Bei Redis bin ich gar nicht so tief eingestiegen. Bei Memcached kannst Du die Größe des verwendeten Speichers anpassen. Fertig.

huschi.
 
Bei Redis bin ich gar nicht so tief eingestiegen. Bei Memcached kannst Du die Größe des verwendeten Speichers anpassen. Fertig.
Okay, gut muss ich mal gucken was mit memcache genauer genommen alles geht.

Falls Du mit "Objekte" Klasseninstanzen meinst, so ist dies über Serialisierung in Beiden möglich.
Danke. Objekte sind Instanzen, andere Begrifflichkeiten mit gleicher Bedeutung.
http://de.wikipedia.org/wiki/Objekt_(Programmierung)

Wie auch immer, ich glaub ich werd mir die beiden nochmal genauer unter die Lupe nehmen.
 
Noch ein Unterschied zwischen den beiden Systemen ist die Art des Speicherns.

Während Memcached ausschließlich im Ram liegt, kann man bei Redis auch Optional persistent (HDD/SSD) speichern. Nach einem Neustart des Servers werden diese Daten wieder in den Ram geladen, bis deren ggf. gesetzte TTL erreicht wurde.
 
Naja und wie sieht es aus mit der Skalierbarkeit beider? Nehmen wir an, ich möchte eines Tages die Infrastruktur aufbessern und würde für eine größere Anwendung die Caching-Server clustern/redundanz wollen? Was käme dann in Frage.

Meiner Meinung nach nehmen sich die beiden nicht viel, außer das Redis "komplexer" (mehr Features) ist.

Der größte Vortei meiner Meinung nach ist, dass Redis Replication von Haus aus integriert hat.
 
Back
Top