Das Da­ten­bank­sys­tem Redis ist in den letzten Jahren immer populärer geworden. Vorteile liegen vor allem in der Ge­schwin­dig­keit und der einfachen Struktur der Da­ten­ban­ken. Daten werden direkt in den Ar­beits­spei­cher des Servers ge­schrie­ben und können so sehr viel schneller wieder auf­ge­ru­fen werden, als man es von anderen Da­ten­ban­ken her kennt. Deshalb wird Redis im Web gern als Cache ein­ge­setzt. Doch auch Messenger-Dienste nutzen die Datenbank, um schnelle Kom­mu­ni­ka­ti­on zu er­mög­li­chen. Wir erklären Ihnen, wie Sie Ihre eigene Redis-Database aufsetzen können.

Managed Database Services
Da­ten­ban­ken – Auf´s We­sent­li­che kon­zen­trie­ren
  • IONOS Cloud-Partner: Die Experten für Ihren Datenbank-Betrieb
  • Flexibel: Maß­ge­schnei­der­te Datenbank-Lösungen ganz auf Ihre Be­dürf­nis­se
  • Re­chen­zen­tren in Deutsch­land: Ihre Daten sind sicher

Schritt 1: Redis in­stal­lie­ren

Redis ist Open Source und kann daher frei von jedem her­un­ter­ge­la­den, genutzt und be­ar­bei­tet werden.

Hinweis

Im Folgenden be­schrei­ben wir, wie man Redis unter Ubuntu in­stal­liert und ein­rich­tet. Es ist al­ler­dings auch möglich, mit Mac oder Windows zu arbeiten. Wenn Redis zunächst nur aus­pro­bie­ren wollen, ohne das System bei sich zu in­stal­lie­ren, empfiehlt sich die Online-Test­um­ge­bung Try Redis.

In einem ersten Schritt lädt man Redis herunter. Dafür verwenden wir den Paket-Manager von Ubuntu, den wir zunächst auf den neuesten Stand bringen.

sudo apt-get update
sudo apt-get install redis-server

Al­ter­na­tiv lassen sich die Dateien von der of­fi­zi­el­len Redis-Website her­un­ter­la­den. Dann muss man das Paket al­ler­dings manuell entpacken und schließ­lich in­stal­lie­ren. Im Anschluss startet man Redis mit einem einfachen Kommando.

redis-server

Um zu testen, ob Redis korrekt läuft, hilft das Interface, über das die Kom­mu­ni­ka­ti­on mit Redis funk­tio­niert. Dieses startet man also zuerst.

redis-cli

Nun zeigt das Interface die IP-Adresse und den Port, über den Redis läuft. Diesen kann man nun anpingen.

127.0.0.1:6397> ping
PONG

Redis antwortet und zeigt damit an, dass das Da­ten­bank­sys­tem er­folg­reich in­stal­liert wurde. Zu­sätz­lich kann man testen, ob man auch Inhalte setzen kann.

127.0.0.1:6397> set test "OK!"
127.0.0.1:6397> get test
"OK!"
Hinweis

Sie möchten Redis auf einem eigenen Server in­stal­lie­ren? Die Cloud-Server von IONOS lassen sich auch für kleine Projekte skalieren.

Schritt 2: Redis kon­fi­gu­rie­ren

Redis wurde zunächst mit der Standard-Kon­fi­gu­ra­ti­on in­stal­liert. Diese kann man sich per Befehl anzeigen lassen.

127.0.0.1:6397> config get *

In der Auf­lis­tung aller Kon­fi­gu­ra­ti­ons­punk­te stehen Paare immer un­ter­ein­an­der. Zum Punkt „dbfi­le­na­me“ gehört demnach der Wert „dump.rdb“. Das Sternchen, welches wir zum Aufrufen der Liste genutzt haben, ist nur ein Platz­hal­ter für einen be­stimm­ten Punkt der Kon­fi­gu­ra­ti­on. Möchte man nur dieses gezielt über­prü­fen, kann man den Namen des Eintrags an Stelle des Stern­chens einfügen. Man sucht dabei immer nach dem oberen Anteil des Kon­fi­gu­ra­ti­ons­paa­res –der Schlüssel zu dem da­zu­ge­hö­ri­gen Wert.

127.0.0.1:6397> config get dbfilename
1) "dbfilename"
2) "dump.rdb"

Um einen Eintrag in der Kon­fi­gu­ra­ti­ons­da­tei zu ändern, verwendet man den set-Befehl. Dies kann man bei­spiels­wei­se nutzen, um ein Passwort zu setzen.

127.0.0.1:6397> config set requirepass "password"
OK

Möchten wir nun mit get das Passwort abfragen, werden wir auf­ge­for­dert dieses erstmal ein­zu­ge­ben, schließ­lich haben wir Redis gerade gesichert. Dafür verwenden wir den Befehl auth. An­schlie­ßend können wir den Kon­fi­gu­ra­ti­ons­ein­trag wie be­schrie­ben abfragen.

127.0.0.1:6397> auth "password"
127.0.0.1:6397> config get requirepass
1) "requirepass"
2) "password"
Hinweis

Es gibt noch mehr Mög­lich­kei­ten, wie Sie Ihre Datenbank absichern können. Auf der of­fi­zi­el­len Website haben die Ent­wick­ler ver­schie­de­ne Punkte zu­sam­men­ge­fasst.

Redis behält jegliche Da­ten­sät­ze ei­gent­lich im Ar­beits­spei­cher. Um dennoch Per­sis­tenz zu erreichen, kann man einen Snapshot der Datenbank auf der Fest­plat­te anlegen, der in der Datei dump.rdb abgelegt wird.

127.0.0.1:6397> save

Durch den save-Befehl haben wir manuell einen Snapshot erstellt. Die Si­che­run­gen lassen sich aber auch au­to­ma­ti­sie­ren.

127.0.0.1:6397> save 60 10

In diesem Beispiel haben wir dem Befehl zwei Parameter gegeben: Nun wird alle 60 Sekunden ge­spei­chert, falls es in diesem Zeitraum bereits zehn Än­de­run­gen gegeben hat.

Im aktiven Betrieb eignet sich der save-Befehl aber nicht so gut, denn er ver­hin­dert, dass Clients auf die Datenbank zugreifen können. Besser geeignet ist bgsave, da dieser Prozess im Hin­ter­grund läuft.

Neben der Snapshot-Variante gibt es aber auch noch die Append Only File. Bei diesem Modus speichert Redis jeden Vorgang, den man durch­ge­führt hat, in einer Datei. Sollte der Redis-Server also un­ver­hofft abstürzen, lässt sich nach­voll­zie­hen, was zuletzt durch­ge­führt wurde. Um den AOF-Modus zu ak­ti­vie­ren, muss man einer Änderung in der Kon­fi­gu­ra­ti­ons­da­tei vornehmen.

127.0.0.1:6397> config set appendonly yes
Tipp

Wer maximale Si­cher­heit der Daten benötigt, sollte sowohl re­gel­mä­ßi­ge Snapshots erzeugen als auch den AOF-Modus ak­ti­vie­ren. So können praktisch keine Daten verloren gehen. Al­ler­dings machen die Vorgänge die Datenbank zu­ge­ge­be­ner­ma­ßen etwas langsamer.

Schritt 3: Einträge anlegen

Nachdem Sie Redis kon­fi­gu­riert haben, können Sie mit der Datenbank arbeiten. Dafür verwendet man ver­schie­de­ne Da­ten­ty­pen und un­ter­schied­li­che Befehle.

Strings

Am ein­fachs­ten lassen sich Strings setzen. Hierfür verwendet man einfach den set-Befehl.

Hinweis

Es spielt keine Rolle, ob man An­füh­rungs­zei­chen bei der Eingabe von Werten verwendet oder nicht. Zum besseren Lesen des Codes kann man Text in An­füh­rungs­zei­chen setzen, Zah­len­wer­te aber ohne die Mar­kie­rung angeben.

127.0.0.1:6397> set foo "bar"
127.0.0.1:6397> set value 1

Ruft man die Einträge foo und value nun mit get auf, werden die ent­spre­chen­den Werte angezeigt.

127.0.0.1:6397> get foo
"bar"
127.0.0.1:6397> get value
"1"

Um einen Eintrag zu löschen, verwendet man den del-Befehl.

127.0.0.1:6397> del foo
(integer) 1
127.0.0.1:6397> get foo
(nil)

Wer nicht viele Einträge mit einer Ex­tra­zei­le Code anlegen möchte, kann die er­wei­ter­te Funktion mset verwenden. Um die Werte von mehreren Einträgen gleich­zei­tig abzurufen, existiert parallel mget.

127.0.0.1:6397> mset foo1 "bar1" foo2 "bar2" foo3 "bar3"
OK
127.0.0.1:6397> mget foo1 foo2 foo3
1) "bar1"
2) "bar2"
3) "bar3"

Lists

Mit Redis kann man aber auch andere Da­ten­ty­pen verwenden. Bei der Arbeit mit der Datenbank sind z. B. Listen und Sets beliebt. Beides sind An­samm­lun­gen von Werten. Während Sets al­ler­dings un­sor­tiert sind, sind die Werte in Listen durch­num­me­riert. Man kann in Listen Einträge hin­zu­fü­gen, abfragen und wieder löschen.

127.0.0.1:6397> lpush mylist foo
(integer) 1
127.0.0.1:6397> lpush mylist bar
(integer) 2
127.0.0.1:6397> lrange mylist 0 10
1) "foo"
2) "bar"
127.0.0.1:6397> linsert mylist before "bar" "test"
(integer) 3
127.0.0.1:6397> lrange mylist 0 10
1) "foo"
2) "test"
3) "bar"
127.0.0.1:6397> lrem mylist 0 foo
(integer) 1
127.0.0.1:6397> lrange mylist 0 10
1) "test"
2) "bar"

In diesem Beispiel haben wir zunächst zwei Elemente in eine Liste eingefügt (lpush) und uns diese anzeigen lassen. Bei dem Befehl lrange gibt man an, welcher Bereich (hier 0 bis 10) wie­der­ge­ge­ben werden soll, wobei man auch negative Zahlen verwenden kann. An­schlie­ßend haben wir mit linsert einen weiteren Wert vor einen be­stehen­den eingefügt (auch after wäre hier möglich) und damit die Num­me­rie­rung verändert. Der Befehl lrem kann Einträge mit einem spe­zi­fi­schen Wert aus der Liste löschen.

Compute Engine
Die ideale IaaS für Ihre Workloads
  • Kos­ten­güns­ti­ge vCPUs und leis­tungs­star­ke de­di­zier­te Cores
  • Höchste Fle­xi­bi­li­tät ohne Min­dest­ver­trags­lauf­zeit
  • Inklusive 24/7 Experten-Support

Sets

Für Sets kennt Redis andere Befehle, die aber ähnliche Er­geb­nis­se liefern:

127.0.0.1:6397> sadd myset "foo"
(integer) 1
127.0.0.1:6397> sadd myset "bar"
(integer) 1
127.0.0.1:6397> smembers myset
1) "bar"
2) "foo"
127.0.0.1:6397> sismember myset "bar"
(integer) 1
127.0.0.1:6397> srem myset "bar"
(integer) 1
127.0.0.1:6397> smembers myset
1) "foo"

Mit sadd lassen sich auch mehrere Elemente gleich­zei­tig in das Set aufnehmen, wenn man diese im Kommando nach­ein­an­der einfügt. Um sich das Set anzeigen zu lassen, reicht der Befehl smembers und der Name des ge­wünsch­ten Sets. Über den Befehl sismember kann man zudem nach einem be­stimm­ten Eintrag suchen. Analog zur Liste kann man mit srem einzelne Einträge löschen.

Redis gibt Nutzern aber auch die Mög­lich­keit, Sets in einem sor­tier­ten Format zu verwenden.

127.0.0.1:6397> zadd mysortedset 1 "foo"
(integer) 1
127.0.0.1:6397> zadd mysortedset 2 "bar"
(integer) 1
127.0.0.1:6397> zadd mysortedset 2 "foobar"
(integer) 1
127.0.0.1:6397> zrange mysortedset 0 10
1) "foo"
2) "bar"
3) "foobar"

Zum Hin­zu­fü­gen von Elementen verwendet man bei dieser Variante den Befehl zadd und einen Score. Während die Werte selbst nicht mehrfach auftreten können, darf man beim Score mehrfach die gleiche Zahl angeben. Der Score ist also keine direkte Num­me­rie­rung innerhalb des Sets, sondern eine Ge­wich­tung. Alle Einträge mit dem Score 2 kommen nach den Elementen mit dem Score 1. Anzeigen lassen kann man sich alle oder nur aus­ge­wähl­te Einträge mit zrange.

Hashes

Eine Be­son­der­heit stellt der Datentyp Hash dar. Hierbei handelt es sich, ähnlich wie bei Sets und Listen, um einzelne Einträge, die mehrere Werte enthalten können. Al­ler­dings gibt es im Sinne von Key-Value-Paaren zu jedem Wert auch einen Schlüssel.

127.0.0.1:6397> hset user1 name "bob" email "bob@example.com" password "rK87_x"
OK
127.0.0.1:6397> hget user1 name
1) "bob"
127.0.0.1:6397> hgetall user1
1) "name"
2) "bob"
3) "email"
4) "bob@example.com"
5) "password"
6) "rK87_x"
127.0.0.1:6397> hvals user1
1) "bob"
2) "bob@example.com"
3) "rK87_x"
127.0.0.1:6397> hkeys user1
1) "name"
2) "email"
3) "password"
> hdel user1 password
(integer) 1
127.0.0.1:6397> hgetall user1
1) "name"
2) "bob"
3) "email"
4) "bob@example.com"
127.0.0.1:6397> del user1
(integer) 1
127.0.0.1:6397> hgetall user1
(empty list or set)

In diesem Beispiel haben wir mit hset einen Hash mit dem Namen user1 erstellt. Der Hash hat drei Felder. Über den Befehl hget kann der Wert von jedem Feld einzeln auf­ge­ru­fen werden. Um sich alle anzeigen zu lassen, kann man hgetall verwenden. Weitere Ab­fra­ge­mög­lich­kei­ten erhält man durch hvals (zeigt alle im Hash ge­spei­cher­ten Werte an) und hkeys (zeigt alle im Hash ge­spei­cher­ten Schlüssel an). Einzelne Felder lassen sich mit hdel löschen, der komplette Hash wie gewohnt mit del.

Hinweis

Das Kommando flushall sorgt dafür, dass alle Einträge der Datenbank gelöscht werden.

Schritt 4: Weitere Optionen

Mit Redis kann man natürlich nicht nur Einträge in einer Datenbank vornehmen. Man kann den Daten auch noch bestimmte Ei­gen­schaf­ten verpassen. Sehr hilfreich kann bei­spiels­wei­se die in­kre­men­tel­le Ver­grö­ße­rung oder Ver­klei­ne­rung sein.

127.0.0.1:6397> set foo 1
OK
127.0.0.1:6397> get foo
"1"
127.0.0.1:6397> incr foo
(integer) 2
127.0.0.1:6397> incr foo
(integer) 3
127.0.0.1:6397> get foo
"3"
127.0.0.1:6397> decr foo
(integer) 2
127.0.0.1:6397> get foo
"2"

Mithilfe dieser Funk­tio­nen kann man also Werte um eins erhöhen oder ver­rin­gern. Manchmal möchte man aber auch Werte setzen, die nur für eine bestimmte Zeit­span­ne in der Datenbank vorhanden sind. Dabei hilft die Funktion expire.

127.0.0.1:6397> set foo "bar"
OK
127.0.0.1:6397> expire foo 100
(integer) 1
127.0.0.1:6397> ttl foo
(integer) 50
127.0.0.1:6397> ttl foo
(integer) -50
127.0.0.1:6397> get foo
(nil)

Der expire-Befehl verlangt eine Zeit­span­ne in Sekunden. In diesem Beispiel haben wir die Halt­bar­keit des Eintrags also auf 100 Sekunden gesetzt. Nach der Hälfte der Zeit haben wir mit dem Befehl ttl nach der Time-to-live gefragt, also die ver­blei­ben­de Zeit. Wartet man noch länger, geht die TTL in einen negativen Bereich. Der Eintrag besteht zu diesem Zeitpunkt nicht mehr.

Mit dem Befehl setex lässt sich ein Eintrag in der Datenbank direkt beim Erstellen mit einer TTL ver­knüp­fen.

127.0.0.1:6397> setex foo 100 "bar"
OK

Ist ein Eintrag erstmal angelegt, kann man diesen auch erweitern. Das Kommando append fügt dem hin­ter­leg­ten Wert einen weiteren hinzu.

127.0.0.1:6397> set foo "Hello"
OK
127.0.0.1:6397> append foo " World"
(integer) 11
127.0.0.1:6397> get foo
"Hello World"
127.0.0.1:6397> set bar 5
OK
127.0.0.1:6397> append bar 10
(integer) 3
127.0.0.1:6397> get bar
"510"

Wie man sehen kann, wenn man die ent­spre­chen­den Werte wieder aufruft: Die neuen Kom­po­nen­ten werden einfach an den be­stehen­den Wert angehängt. Sollte der Eintrag noch nicht bestehen, wirkt append genau wie set.

Des Weiteren lassen sich Einträge durch den Befehl rename auch um­be­nen­nen.

127.0.0.1:6397> set foo 100
OK
127.0.0.1:6397> rename foo bar
OK
127.0.0.1:6397> get foo
(nil)
127.0.0.1:6397> get bar
"100"
Tipp

Es gibt noch viele weitere Befehle, um mit Redis korrekt zu arbeiten. In der of­fi­zi­el­len Do­ku­men­ta­ti­on kann man alle ver­füg­ba­ren Kommandos mit Be­schrei­bung nachlesen.

Zum Hauptmenü