© saicle/Shutterstock.com
PHP Magazin
Eine (verkannte) NoSQL-Datenbank

Eine (verkannte) NoSQL-Datenbank

Der Remote Dictionary Service, kurz Redis, ist für viele leider nicht mehr als ein persistenter Memcache. Mit diesem Vorurteil möchte ich in diesem Artikel aufräumen. PHP verfügt, neben pRedis [1], einer reinen PHP-Implementierung, mit phpredis [2] über eine in C geschriebene Extension für höhere Performance. In diesem Artikel werden wir mit der Extension arbeiten; die Implementierung der Beispiele mit pRedis gestaltet sich jedoch ähnlich. Als Demoapplikation schauen wir uns ein Modul auf der vor Kurzem neu gelaunchten trivago-Plattform an. Es handelt sich um die Kartennavigation, die sich oben links auf der Seite befindet und fast vollständig auf Redis basiert.

Mario Müller


Redis wird von Salvatore Sanfilippo entwickelt, der für VMware arbeitet und dort die Möglichkeit bekommt, sich vollständig auf die Weiterentwicklung der Datenbank zu konzentrieren. Redis entstand Anfang 2009, um die Performance eines (Web-)Analytics-Produkts (namens LLOOGG [3]) aus Salvatores Start-up zu verbessern. Mitte 2009 konnte er dann die zunächst eingesetzte MySQL-Datenbank vollständig durch Redis ablösen. Das Projekt wurde ein großer Erfolg und konnte sich innerhalb kürzester Zeit über eine wachsende Community freuen. Im März 2010 fand der bereits erwähnte Wechsel zu VMware statt. Trotz der Festanstellung Salvatores bleibt Redis weiterhin unter der BSD-Lizenz verfügbar. Redis wird von vielen großen Projekten eingesetzt und hat eine aktive Community. Zu den bekanntesten Plattformen gehört wohl YouPorn, die schon durch den Einsatz von Symfony2 durch die PHP-Presse gegangen ist. Projekte wie EngineYard, GitHub, Flickr und StackOverflow gehören ebenfalls zu der Liste der Anwender, was Redis eine sehr breite Basis verschafft.

Redis? Ist das nicht wie Memcache mit Persistenz?

Kurze Antwort: Nein. Redis ist in mehreren Aspekten anders aufgebaut als Memcache. Memcache dient in erster Linie als Level 2 Cache, für manche sogar als Level 1 Cache. Redis hingegen ist eine Datenbank, wenn auch keine im relationalen Sinn.

Redis unterstützt neben den klassischen, aus Memcache bekannten Operationen zum Schreiben und Lesen von einfachen Daten ein deutlich weiteres Feld an Datentypen und Operationen. Die Datentypen teilen sich in Listen, Sets und HashMaps auf. Transaktionen (Kasten: „Transaktionen in Redis“) sind mit dem Command Set aus MULTI, EXEC, DISCARD und WATCH möglich. Hinzu kommt ab Version 2.6 auch eine Scripting-Schnittstelle in Lua.

Ein Feature, das selten in Artikeln auftaucht, jedoch umso häufiger Anwendung findet, ist das der PubSub Channels. Eine beliebige Anzahl von Clients baut jeweils eine persistente Verbindung zu einem Redis-Server auf und hört auf neue Nachrichten in einem Kanal. Ein anderer Client publiziert eine Nachricht, bestehend aus einem String, in diesem Kanal. Diese Nachricht wird dann an alle verbundenen Clients verteilt. Die Nachricht ist damit jedoch verloren, wenn der Client nicht genau in diesem Moment verbunden ist, denn es gibt für PubSub keine Persistenz. Diese Form der Eventverteilung ist vielleicht bekannt aus node.js, wo ein solches Vorgehen meist über (Web-)Sockets und Events gelöst wird. Der Vorteil der Redis-Implementierung...

PHP Magazin
Eine (verkannte) NoSQL-Datenbank

Eine (verkannte) NoSQL-Datenbank

Der Remote Dictionary Service, kurz Redis, ist für viele leider nicht mehr als ein persistenter Memcache. Mit diesem Vorurteil möchte ich in diesem Artikel aufräumen. PHP verfügt, neben pRedis [1], einer reinen PHP-Implementierung, mit phpredis [2] über eine in C geschriebene Extension für höhere Performance. In diesem Artikel werden wir mit der Extension arbeiten; die Implementierung der Beispiele mit pRedis gestaltet sich jedoch ähnlich. Als Demoapplikation schauen wir uns ein Modul auf der vor Kurzem neu gelaunchten trivago-Plattform an. Es handelt sich um die Kartennavigation, die sich oben links auf der Seite befindet und fast vollständig auf Redis basiert.

Mario Müller


Redis wird von Salvatore Sanfilippo entwickelt, der für VMware arbeitet und dort die Möglichkeit bekommt, sich vollständig auf die Weiterentwicklung der Datenbank zu konzentrieren. Redis entstand Anfang 2009, um die Performance eines (Web-)Analytics-Produkts (namens LLOOGG [3]) aus Salvatores Start-up zu verbessern. Mitte 2009 konnte er dann die zunächst eingesetzte MySQL-Datenbank vollständig durch Redis ablösen. Das Projekt wurde ein großer Erfolg und konnte sich innerhalb kürzester Zeit über eine wachsende Community freuen. Im März 2010 fand der bereits erwähnte Wechsel zu VMware statt. Trotz der Festanstellung Salvatores bleibt Redis weiterhin unter der BSD-Lizenz verfügbar. Redis wird von vielen großen Projekten eingesetzt und hat eine aktive Community. Zu den bekanntesten Plattformen gehört wohl YouPorn, die schon durch den Einsatz von Symfony2 durch die PHP-Presse gegangen ist. Projekte wie EngineYard, GitHub, Flickr und StackOverflow gehören ebenfalls zu der Liste der Anwender, was Redis eine sehr breite Basis verschafft.

Redis? Ist das nicht wie Memcache mit Persistenz?

Kurze Antwort: Nein. Redis ist in mehreren Aspekten anders aufgebaut als Memcache. Memcache dient in erster Linie als Level 2 Cache, für manche sogar als Level 1 Cache. Redis hingegen ist eine Datenbank, wenn auch keine im relationalen Sinn.

Redis unterstützt neben den klassischen, aus Memcache bekannten Operationen zum Schreiben und Lesen von einfachen Daten ein deutlich weiteres Feld an Datentypen und Operationen. Die Datentypen teilen sich in Listen, Sets und HashMaps auf. Transaktionen (Kasten: „Transaktionen in Redis“) sind mit dem Command Set aus MULTI, EXEC, DISCARD und WATCH möglich. Hinzu kommt ab Version 2.6 auch eine Scripting-Schnittstelle in Lua.

Ein Feature, das selten in Artikeln auftaucht, jedoch umso häufiger Anwendung findet, ist das der PubSub Channels. Eine beliebige Anzahl von Clients baut jeweils eine persistente Verbindung zu einem Redis-Server auf und hört auf neue Nachrichten in einem Kanal. Ein anderer Client publiziert eine Nachricht, bestehend aus einem String, in diesem Kanal. Diese Nachricht wird dann an alle verbundenen Clients verteilt. Die Nachricht ist damit jedoch verloren, wenn der Client nicht genau in diesem Moment verbunden ist, denn es gibt für PubSub keine Persistenz. Diese Form der Eventverteilung ist vielleicht bekannt aus node.js, wo ein solches Vorgehen meist über (Web-)Sockets und Events gelöst wird. Der Vorteil der Redis-Implementierung...

Neugierig geworden?


    
Loading...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang