Modul installieren
pip install redisVerbindung herstellen
import redis
# Verbindung zu Redis auf localhost
redis_client = redis.Redis(host='localhost', port=6379, db=0)
# oder die Verwendung über eine connection URL
redis_client = redis.from_url('redis://localhost:6379/0')String Operationen
# Setzen eines String-Wertes
redis_client.set('mein_key', 'Hallo, Redis!')
# Einen String auslesen
value = redis_client.get('mein_key')
print(value.decode('utf-8')) # Ausgabe: Hallo, Redis!
# einen string mit Ablaufzeit setzen (10 seconds)
redis_client.setex('temp_key', 10, 'Ich werde in 10 Sekunden gelöscht.')
# Einen numerischen Wert automatisch hochzählen
redis_client.set('zähler', 0)
redis_client.incr('zähler')
# Ausgabe: 1
print(redis_client.get('zähler'))List Operationen
# Mehrere Elemente(Items) in eine Liste schreiben
redis_client.lpush('meine_liste', 'item1', 'item2', 'item3')
# Pop an item from the list
item = redis_client.rpop('meine_liste')
print(item.decode('utf-8')) # Ausgabe: item1
# Get all items in the list
items = redis_client.lrange('meine_liste', 0, -1)
# Ausgabe: ['item3', 'item2']
print([item.decode('utf-8') for item in items])Hash Operationen
# Hash-Felder setzen
redis_client.hset('user:1', 'name', 'Max Mustermann')
redis_client.hset('user:1', 'email', 'max.mustermann@ts.com')
# Ein Hash-Feld auslesen
name = redis_client.hget('user:1', 'name')
print(name.decode('utf-8')) # Ausgabe: Max Mustermann
# Alle Hash-Felder auslesen
user_data = redis_client.hgetall('user:1')
print({k.decode('utf-8'): v.decode('utf-8') for k, v in user_data.items()})Set Operationen
# Elemente (Items) zu einem Set hinzufügen
redis_client.sadd('mein_set', 'item1', 'item2', 'item3')
# Prüfen, ob ein spezielles Element im Set ist
is_member = redis_client.sismember('mein_set', 'item2')
print(is_member) # Ausgabe: True
# Alle Elemente eines Sets auslesen
members = redis_client.smembers('mein_set')
# Ausgabe der Elemente
print([member.decode('utf-8') for member in members])Sorted Set Operationen
# Spieler mit den erzielten Punkten in ein sortiertes Set schreiben
redis_client.zadd('payer_sorted_list', {'spieler1': 100, 'spieler2': 200,
'spieler3': 150})
# Die Position (rank) eines Spielers auslesen
rank = redis_client.zrank('leaderboard', 'player2')
print(rank) # Ausgabe: 2
# Die Top-Spieler ermitteln
top_players = redis_client.zrange('payer_sorted_list', 0, 2, desc=True,
withscores=True)
#Ausgabe der Top-Spieler
print([(player.decode('utf-8'), score) for player, score in top_players])Pipeline Operationen
# Aufbau einer Redis-Pipeline
with redis_client.pipeline() as pipe:
pipe.set('key1', 'value1')
pipe.set('key2', 'value2')
pipe.set('key3', 'value3')
pipe.execute()Error Handling
from redis import Redis, RedisError
redis_client = Redis(host='localhost', port=6379, db=0)
try:
redis_client.ping()
except RedisError as e:
print(f"Error connecting to Redis: {e}")
finally:
redis_client.close()Pub/Sub
Das Publish/Subscribe-Messaging Paradigma von Redis ermöglicht die Echtzeitkommunikation zwischen
verschiedenen Teilen einer Anwendung oder zwischen verschiedenen Anwendungen.
So funktioniert Redis Pub/Sub
- Publisher: Senden Nachrichten an bestimmte Kanäle, ohne zu wissen, wer (wenn überhaupt) zuhört.
- Subscriber: Hören einen oder mehrere Kanäle ab und empfangen Nachrichten in Echtzeit.
- Kanäle: Dienen als Leitungen für Nachrichten und ermöglichen themen-basiertes Messaging.
import redis
import threading
redis_client = redis.Redis(host='localhost', port=6379, db=0)
def publish_message():
while True:
message = input("Enter message to publish: ")
redis_client.publish('my_channel', message)
def subscribe_to_messages():
pubsub = redis_client.pubsub()
pubsub.subscribe('my_channel')
for message in pubsub.listen():
if message['type'] == 'message':
print(f"Received: {message['data'].decode('utf-8')}")
# Start des publisher and subscriber in eigenen Threads
threading.Thread(target=publish_message).start()
threading.Thread(target=subscribe_to_messages).start()Session Verwaltung
Redis ist aufgrund seiner Geschwindigkeit und der Möglichkeit, Ablaufzeiten für Daten festzulegen, eine
ausgezeichnete Wahl für die Verwaltung von Benutzersitzungen in Webanwendungen.
Die Vorteile der Session-Verwaltung sind:
- Geschwindigkeit: Der Speicher im Arbeitsspeicher ermöglicht einen schnellen Abruf von Sitzungsdaten.
- Skalierbarkeit: Redis kann eine große Anzahl gleichzeitiger Sitzungen verarbeiten.
- Verfallszeit (Expiration-Time): Die integrierte Unterstützung für die Gültigkeit von Schlüsseln vereinfacht die Verwaltung von Zeitüberschreitungen.
- Persistenz: Optionen zum Speichern von Sitzungsdaten auf der Festplatte, falls erforderlich
from flask import Flask, session
from redis import Redis
import uuid
app = Flask(__name__)
app.secret_key = 'your_secret_key'
redis_client = Redis(host='localhost', port=6379, db=0)
@app.before_request
def before_request():
session.permanent = True
app.permanent_session_lifetime = timedelta(minutes=30)
session.modified = True
session['redis_id'] = session.get('redis_id', str(uuid.uuid4()))
@app.route('/set_data')
def set_data():
redis_client.hset(f"session:{session['redis_id']}", 'username',
'john_doe')
return 'Data set in Redis'
@app.route('/get_data')
def get_data():
username = redis_client.hget(f"session:{session['redis_id']}", 'username')
return f'Username: {username.decode("utf-8") if username else "Not set"}'
if __name__ == '__main__':
app.run(debug=True)