Hi,
Ich suche einen key-value store, für den es einen vernünftigen python 3 client gibt.
Ich habe bisher memcache verwendet, aber das 1MB pro Item Limit macht mir zu schaffen. Ich frage eine DB ab und erhalte da ziemlich große Ergebnise (bisher max. 20MB).
Im Prinzip suche ich sowas wie memcache (vor allem das man angeben kann wie langer der Wert vorgehalten werden soll fan dich klasse), nur ohne das Limit
Ich habe zwar gelesen das man das Limit bei memcache erhöhen kann, aber ich denke die Leute werden sich da schon etwas bei gedacht haben Ich hab's auch schon versucht und bei richtig großen values kackt der Service jedes mal ab.
Erfahrungen, Empfehlungen, Ideen ?
Key-Value Store für Python 3
- noisefloor
- User
- Beiträge: 3856
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
der Superstar unter den KV-Stores ist Redis (http://redis.io). Dafür gibt's auch eine P3 Anbindung (http://pypi.python.org/pypi/redis).
Ich habe für freies Magazin mal eine Artikel zu Redis geschrieben (Link. In dem solltest du einen guten Überblick über die Möglichkeiten von Redis bekommen.
Gruß, noisefloor
der Superstar unter den KV-Stores ist Redis (http://redis.io). Dafür gibt's auch eine P3 Anbindung (http://pypi.python.org/pypi/redis).
Ich habe für freies Magazin mal eine Artikel zu Redis geschrieben (Link. In dem solltest du einen guten Überblick über die Möglichkeiten von Redis bekommen.
Gruß, noisefloor
- noisefloor
- User
- Beiträge: 3856
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
Nachtrag: Redis erlaubt Werte bis zu einer Größe von 512 MB.
Gruß, noisefloor
Nachtrag: Redis erlaubt Werte bis zu einer Größe von 512 MB.
Gruß, noisefloor
Hi,
Danke, Redis scheint echt perfekt zu sein.
Ich habe aber schon das 1. Problem und hoffe du kannst mir helfen
Ich verwende Redis in der Version 2.4.
Ich will eigentlich eine Python Liste von Python Listen unter einem key speichern.
Das scheint nicht zu klappen, deswegen pickle ich jetzt meine Liste zu einem byte-wert.
Ich müsste jetzt also nur mehr eine Liste von bytes unter einem key speichern.
Ich dachte eigenltich das lpush dafür gedacht sei aber ich kriege ständig den Fehler, das der key das falsche value halten würde.
Hier mein Code:
Error:
Noch dazu würde ich gerne eine expiration auf die items setzen, aber das scheint ja gar nicht vorgesehen zu sein....wäre aber auch nicht soooo schlimm.
//EDIT:
Der Fehler kam beim lesen der Values. Da muss man dann natürlich lrange verwenden.....-.-
Danke, Redis scheint echt perfekt zu sein.
Ich habe aber schon das 1. Problem und hoffe du kannst mir helfen
Ich verwende Redis in der Version 2.4.
Ich will eigentlich eine Python Liste von Python Listen unter einem key speichern.
Das scheint nicht zu klappen, deswegen pickle ich jetzt meine Liste zu einem byte-wert.
Ich müsste jetzt also nur mehr eine Liste von bytes unter einem key speichern.
Ich dachte eigenltich das lpush dafür gedacht sei aber ich kriege ständig den Fehler, das der key das falsche value halten würde.
Hier mein Code:
Code: Alles auswählen
job_atts = pickle.dumps([event.job, event.exception, datetime.now()])
REDIS_CLIENT.lpush('jobs_fail', job_atts)
Code: Alles auswählen
redis.exceptions.ResponseError: Operation against a key holding the wrong kind of value
//EDIT:
Der Fehler kam beim lesen der Values. Da muss man dann natürlich lrange verwenden.....-.-
- noisefloor
- User
- Beiträge: 3856
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
Gruß, noisefloor
Redis kennt EXPIRE, mit dem man die Lebensdauer eines Schlüssels setzen kann. Das geht AFAIR mit allen Datentypen. Doku: http://redis.io/commands/expireNoch dazu würde ich gerne eine expiration auf die items setzen,
Gruß, noisefloor
noisefloor hat geschrieben:Hallo,
Redis kennt EXPIRE, mit dem man die Lebensdauer eines Schlüssels setzen kann. Das geht AFAIR mit allen Datentypen. Doku: http://redis.io/commands/expireNoch dazu würde ich gerne eine expiration auf die items setzen,
Gruß, noisefloor
Danke für den Tipp. Ich verwende jetzt ltrim, was sowieso besser für mich geeignet ist