L'obtention de valeurs avec le bon type dans le Redis
Je suis en utilisant le redis dans mon application en python pour stocker des valeurs simples telles que les comptoirs et l'horodatage des listes, mais en essayant d'obtenir un compteur et de le comparer avec un numéro, je suis tombé sur un problème.
Si je fais:
import redis
...
myserver = redis.Redis("localhost")
myserver.set('counter', 5)
et puis essayer d'obtenir cette valeur comme ceci:
if myserver.get('counter') < 10:
myserver.incr('counter')
puis-je obtenir un type d'erreur dans l'instruction if parce que je suis la comparaison '5' < 10, ce qui signifie je suis stocker une valeur de type entier et d'obtenir une chaîne d'un (qui peut être considéré comme une valeur différente).
Ma question est: est-ce censé fonctionner comme ça? Je veux dire, c'est une très type de base, je comprends, si je dois analyser des objets, mais un int? Semble que je suis en train de faire quelque chose de mal.
Est-il une configuration qui me manque?
Est-il possible de faire redis retourner le bon type et pas toujours une chaîne de caractères?
Je dis cela parce que c'est la même chose pour les listes et les datetimes ou même des valeurs à virgule flottante.
- Ce que cela pourrait être un problème avec le redis-py client que j'utilise et pas redis lui-même?
- J'ai été déconner avec la src/redis-cli qui vient avec leur distribution. Malheureusement, il ressemble redis magasins entiers comme des chaînes de caractères, et en déduit t-il des types lors incr/decr opérations.
- vous pouvez utiliser si int(monserveur.get('compteur'))<10.
Vous devez vous connecter pour publier un commentaire.
Techniquement parlant, vous avez besoin de prendre soin de ce sur votre propre.
Cependant, ont un oeil à ce lien, en particulier dans le cadre de leur README qui se réfère à des analyseurs et de la réponse des rappels, peut-être que c'est quelque chose que vous pouvez utiliser. La Question serait de savoir si cela est trop pour vous ou pas.
Comme @favoretti dit, la réponse rappels fera l'affaire. C'est pas compliquer du tout, juste une ligne et tout sera pris en charge.
pour
hmget
, elle retourne une liste de chaînes, pas une chaîne unique, vous avez besoin de construire un peu plus exhaustive de la fonction de rappel:même pour
hgetall
.Semble que cela est de savoir comment redis stocke ses données:
Si vous vraiment voulez, vous pourriez probablement monkeypatch la
redis-py
client pour en déduire les types de données.Vous pouvez définir decode_respone comme de Vrais
Bien que tirant parti de
set_response_callback
est très bien pour les types de données simples, si vous vous demandez à propos de la manière la plus rapide et la plus simple de l'itinéraire pour stocker des choses comme des dictionnaires, une liste de tuples – et la préservation de l'python-native types de données qu'ils peuvent-ou-peut-pas à contenir, je recommande l'utilisation de python intégré danspickle
bibliothèque:Ici est un client simple qui permettra de réduire le
pickle
standard dans l'exemple ci-dessus et de vous fournir une interface propre pour stocker et récupérer des indigènes python les types de données vers et à partir de Redis:Utilisation:
Voici mon test. Deux redis connexions: retourne le type int, l'autre flotteur