MySQL und MariaDB Installation: Grundlegende Verwaltung
Schritt-für-Schritt MySQL und MariaDB Installation unter Linux, mysql_secure_installation, Datenbanken und Benutzer erstellen, SQL-Grundbefehle, Remote-Zugriff und Performance-Tuning.
Redis und Memcached Installation auf Ubuntu/Debian, Grundbefehle, Persistenz-Einstellungen, TTL-Konfiguration, Redis vs Memcached Vergleich und Anwendungsintegration.
Eine Cache-Schicht ist eine kritische Infrastrukturkomponente, die die Leistung von Webanwendungen dramatisch verbessert. Durch das Speichern von Datenbankabfragen, API-Antworten und Berechnungsergebnissen im Arbeitsspeicher werden Millisekunden-Antwortzeiten bei wiederholten Anfragen ermoeglicht. Dieser Leitfaden behandelt die Installation, Konfiguration und Anwendungsintegration von Redis und Memcached.
Beide Systeme bieten hochleistungsfahige In-Memory-Datenspeicherung, richten sich jedoch an unterschiedliche Anwendungsfalle:
| Funktion | Redis | Memcached |
|---|---|---|
| Datenstrukturen | String, Hash, List, Set, ZSet | Nur String |
| Persistenz | RDB + AOF | Keine |
| Replikation | Master-Replica + Cluster | Keine |
| Pub/Sub | Ja | Nein |
| Lua-Scripting | Ja | Nein |
| Multi-Threading | Teilweise (I/O) | Vollstandig |
| Speichereffizienz | Mittel | Hoch |
Redis wird fur neue Projekte empfohlen. Mit umfangreichen Datenstrukturen, Persistenz und Replikationsunterstutzung deckt es weitaus mehr Anwendungsfalle ab. Memcached wird nur bevorzugt, wenn einfaches String-Caching und maximale Multi-Thread-Leistung benotigt werden.
# Paketliste aktualisieren
apt update
# Redis installieren
apt install -y redis-server
# Dienststatus pruefen
systemctl status redis-server
# Autostart aktivieren
systemctl enable redis-server
# Erforderliche Tools installieren
apt install -y curl gpg
# Redis GPG-Schlussel hinzufuegen
curl -fsSL https://packages.redis.io/gpg | gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
# Repository hinzufuegen
echo 'deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb '$(lsb_release -cs)' main' | tee /etc/apt/sources.list.d/redis.list
# Aktualisieren und installieren
apt update
apt install -y redis
redis-server --version
# Ausgabe: Redis server v=7.x.x ...
redis-cli --version
# Ausgabe: redis-cli 7.x.x
# EPEL-Repository aktivieren
dnf install -y epel-release
# Redis installieren
dnf install -y redis
# Dienst starten und aktivieren
systemctl start redis
systemctl enable redis
# Status pruefen
systemctl status redis
# Konfigurationsdatei bearbeiten
nano /etc/redis/redis.conf
# Lausch-Adresse (nur localhost)
bind 127.0.0.1
# Port (Standard 6379)
port 6379
# Passwortschutz
requirepass StarkesRedisPasswort123!
# Maximale Speichernutzung
maxmemory 512mb
# Raumungsrichtlinie bei vollem Speicher
maxmemory-policy allkeys-lru
# Als Daemon ausfuhren
daemonize yes
# Log-Datei
logfile /var/log/redis/redis-server.log
# Anzahl der Datenbanken
databases 16
systemctl restart redis-server
# Konfiguration verifizieren
redis-cli -a StarkesRedisPasswort123! ping
# Ausgabe: PONG
# Mit Redis CLI verbinden
redis-cli
# Mit Passwort verbinden
redis-cli -a StarkesRedisPasswort123!
# Mit Remote-Server verbinden
redis-cli -h 192.168.1.100 -p 6379 -a passwort
# Verbindungstest
PING
# Antwort: PONG
# String-Wert setzen
SET benutzer:1:name 'Max Mustermann'
# Wert lesen
GET benutzer:1:name
# Wert mit TTL setzen (in Sekunden)
SETEX sitzung:abc123 3600 'benutzer_daten'
# Verbleibende Zeit pruefen
TTL sitzung:abc123
# Wert loeschen
DEL benutzer:1:name
# Pruefen ob Schlussel existiert
EXISTS benutzer:1:name
# Alle Schluessel auflisten (in Produktion vorsichtig verwenden)
KEYS *
# Mit Muster suchen
KEYS benutzer:*
# Hash setzen
HSET benutzer:1 name 'Max' email 'max@example.com' alter 30
# Hash-Feld lesen
HGET benutzer:1 name
# Alle Hash-Felder lesen
HGETALL benutzer:1
# Hash-Feld loeschen
HDEL benutzer:1 alter
# Pruefen ob Hash-Feld existiert
HEXISTS benutzer:1 email
# Element zur Liste hinzufuegen (links)
LPUSH aufgaben 'aufgabe1' 'aufgabe2'
# Element zur Liste hinzufuegen (rechts)
RPUSH aufgaben 'aufgabe3'
# Element aus Liste holen (links)
LPOP aufgaben
# Listenlaenge
LLEN aufgaben
# Listenbereich
LRANGE aufgaben 0 -1
# Element zu Set hinzufuegen
SADD tags 'redis' 'cache' 'nosql'
# Set-Mitglieder auflisten
SMEMBERS tags
# Zu Sorted Set mit Score hinzufuegen
ZADD bestenliste 1500 'spieler1' 2300 'spieler2' 800 'spieler3'
# Sortiert auflisten (aufsteigend)
ZRANGE bestenliste 0 -1 WITHSCORES
# Sortiert auflisten (absteigend)
ZREVRANGE bestenliste 0 2 WITHSCORES
RDB schreibt in bestimmten Intervallen einen Snapshot des gesamten Datensatzes auf die Festplatte:
# /etc/redis/redis.conf
# Speichern wenn 1 Aenderung in 900 Sekunden
save 900 1
# Speichern wenn 10 Aenderungen in 300 Sekunden
save 300 10
# Speichern wenn 10000 Aenderungen in 60 Sekunden
save 60 10000
# RDB-Dateiname
dbfilename dump.rdb
# RDB-Verzeichnis
dir /var/lib/redis
AOF fuegt jeden Schreibvorgang an eine Log-Datei an und bietet zuverlassigere Persistenz:
# AOF aktivieren
appendonlyfile yes
# AOF-Dateiname
appendfilename 'appendonly.aof'
# Synchronisierungsrichtlinie
# always: Bei jedem Schreibvorgang (sicherste, langsamste)
# everysec: Jede Sekunde (empfohlen)
# no: Dem OS uberlassen (schnellste, unsicherste)
appendsync everysec
# AOF-Neuschreib-Schwellenwert
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
In der Produktion wird empfohlen, sowohl RDB als auch AOF zu verwenden. RDB ermoeglicht schnelle Neustarts, wahrend AOF den Datenverlust minimiert.
# Paketliste aktualisieren
apt update
# Memcached installieren
apt install -y memcached libmemcached-tools
# Dienststatus pruefen
systemctl status memcached
# Autostart aktivieren
systemctl enable memcached
# Memcached installieren
dnf install -y memcached
# Dienst starten und aktivieren
systemctl start memcached
systemctl enable memcached
# Konfigurationsdatei bearbeiten
nano /etc/memcached.conf
# Speicherlimit (MB)
-m 256
# Lausch-Adresse
-l 127.0.0.1
# Port
-p 11211
# Maximale Verbindungen
-c 1024
# Thread-Anzahl (basierend auf CPU-Kernen)
-t 4
# Maximale Objektgroesse (Bytes)
-I 1m
# Dienst neu starten
systemctl restart memcached
# Verbindung testen
echo 'stats' | nc 127.0.0.1 11211
# Verbindung via Telnet
telnet 127.0.0.1 11211
# Wert setzen (Schlussel, Flag, TTL Sekunden, Groesse Bytes)
set sitzung:xyz 0 3600 12
benutzer_daten
# Wert lesen
get sitzung:xyz
# Wert loeschen
delete sitzung:xyz
# Statistiken anzeigen
stats
# Alle Daten loeschen
flush_all
# PHP Redis-Erweiterung installieren
apt install -y php-redis
systemctl restart php8.x-fpm
<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->auth('StarkesRedisPasswort123!');
// In Cache schreiben
$redis->setex('benutzer:1', 3600, json_encode(['name' => 'Max', 'email' => 'max@example.com']));
// Aus Cache lesen
$daten = $redis->get('benutzer:1');
if ($daten) {
$benutzer = json_decode($daten, true);
} else {
// Aus Datenbank holen und cachen
$benutzer = aus_datenbank_holen(1);
$redis->setex('benutzer:1', 3600, json_encode($benutzer));
}
# ioredis-Paket installieren
npm install ioredis
const Redis = require('ioredis');
const redis = new Redis({
host: '127.0.0.1',
port: 6379,
password: 'StarkesRedisPasswort123!'
});
// In Cache schreiben
await redis.setex('produkt:42', 1800, JSON.stringify({ name: 'Laptop', preis: 999 }));
// Aus Cache lesen
const daten = await redis.get('produkt:42');
if (daten) {
const produkt = JSON.parse(daten);
console.log(produkt);
}
// Cache loeschen
await redis.del('produkt:42');
# redis-py-Paket installieren
pip install redis
import redis
import json
r = redis.Redis(
host='127.0.0.1',
port=6379,
password='StarkesRedisPasswort123!',
decode_responses=True
)
# In Cache schreiben
r.setex('artikel:5', 7200, json.dumps({'titel': 'Redis Leitfaden', 'inhalt': '...'}))
# Aus Cache lesen
daten = r.get('artikel:5')
if daten:
artikel = json.loads(daten)
# Redis Dienstverwaltung
systemctl start redis-server
systemctl stop redis-server
systemctl restart redis-server
systemctl status redis-server
# Redis-Logs anzeigen
journalctl -u redis-server -f
tail -f /var/log/redis/redis-server.log
# Redis-Informationen via CLI abrufen
redis-cli INFO server
redis-cli INFO memory
redis-cli INFO stats
# Memcached Dienstverwaltung
systemctl start memcached
systemctl stop memcached
systemctl restart memcached
systemctl status memcached
Redis und Memcached sind leistungsstarke Cache-Loesungen, die die Anwendungsleistung erheblich verbessern. Die umfangreichen Datenstrukturen und Persistenzfunktionen von Redis machen es fuer die meisten Szenarien ideal, wahrend Memcached fuer einfache, hochleistungsfahige String-Caching-Anforderungen bevorzugt werden kann. Beide Systeme laufen problemlos auf REXE-Servern.
Redis wird fur neue Projekte empfohlen. Es bietet umfangreiche Datenstrukturen uber Strings hinaus - Hash, List, Set, Sorted Set; bietet Persistenz mit RDB und AOF; unterstutzt Pub/Sub-Messaging und Lua-Scripting. Memcached wird nur fur einfaches String-Caching und maximale Multi-Thread-Leistung bevorzugt. Fur die meisten Webanwendungen ist Redis die bessere Wahl.
Die gangigsten Richtlinien: allkeys-lru (am wenigsten kurzlich verwendeten unter allen Schlusseln loschen - empfohlen fur allgemeinen Cache), volatile-lru (LRU unter TTL-Schlusseln - fur gemischte Nutzung), allkeys-lfu (am wenigsten haufig verwendeten loschen - fur wiederkehrende Zugriffsmuster), noeviction (Fehler zuruckgeben wenn Speicher voll - fur kritische Daten). Fur allgemeine Cache-Nutzung ist allkeys-lru die sicherste Wahl.
Beide zusammen zu verwenden ist der beste Ansatz. RDB erstellt periodische Snapshots und ermoeglicht schnelle Neustarts, aber Daten seit dem letzten Snapshot konnen verloren gehen. AOF protokolliert jeden Schreibvorgang und minimiert Datenverlust, verbraucht aber mehr Festplatten-I/O. In der Produktion beide aktivieren: RDB mit save-Direktiven und AOF mit appendonlyfile yes.
Andern Sie in redis.conf bind 127.0.0.1 zu bind 0.0.0.0 und setzen Sie ein starkes Passwort mit requirepass. Offnen Sie dann Port 6379 in der Firewall: ufw allow 6379/tcp. Aus Sicherheitsgrunden empfiehlt es sich, Redis nicht direkt dem Internet auszusetzen, sondern SSH-Tunneling oder VPN zu verwenden. Beschranken Sie den Zugriff wenn moglich auf bestimmte IP-Adressen.
Nein, Memcached ist ein rein speicherbasiertes System ohne Persistenzunterstutzung. Alle Daten gehen beim Neustart des Servers verloren. Daher sollte Memcached nur fur temporare Cache-Daten verwendet werden, die neu generiert werden konnen. Fur dauerhafte Datenspeicherung oder Sitzungsverwaltung verwenden Sie stattdessen Redis.
Verwenden Sie redis-cli INFO memory um detaillierte Speicherstatistiken zu sehen. Achten Sie auf used_memory (verwendeter Speicher), maxmemory (maximales Limit) und mem_fragmentation_ratio (Fragmentierungsrate). Wenn die Fragmentierungsrate 1,5 uberschreitet, konnen Sie den Speicher mit dem Befehl MEMORY PURGE optimieren. Sie konnen auch Echtzeit-Statistiken mit redis-cli --stat uberwachen.
Schritt-für-Schritt MySQL und MariaDB Installation unter Linux, mysql_secure_installation, Datenbanken und Benutzer erstellen, SQL-Grundbefehle, Remote-Zugriff und Performance-Tuning.
PostgreSQL-Installation auf Ubuntu/Debian und RHEL/CentOS, Benutzer und Datenbanken erstellen, grundlegende SQL-Befehle, Remote-Verbindung konfigurieren und Backup-Strategien. Schritt-fur-Schritt-Anleitung.
Schritt-fur-Schritt phpMyAdmin Installation auf Apache und Nginx, SSL-Konfiguration, Benutzerverwaltung, IP-Einschraenkungen und Sicherheitshaertung.