Comment afficher TOUTES les touches, à travers redis-cli?
Je suis en utilisant le redis comme une base de données en mémoire principale pour django cache.
En particulier, j'utilise django-redis configuré comme suit:
CACHES = {
'default': {
'BACKEND': 'redis_cache.cache.RedisCache',
'KEY_PREFIX': DOMAIN_NAME,
'LOCATION': 'unix:/tmp/redis_6379.sock:1',
'OPTIONS': {
'PICKLE_VERSION': -1, # default
'PARSER_CLASS': 'redis.connection.HiredisParser',
'CLIENT_CLASS': 'redis_cache.client.DefaultClient',
},
},
}
Mon django cache semblent fonctionner correctement.
La chose étrange est que je ne peut pas voir django cache de clés à l'aide de la redis-cli
ligne de commande.
[modifier]
Veuillez noter que dans ce qui suit que j'ai essayé les deux avec
$ redis-cli
et
$ redis-cli -s /tmp/redis_6379.sock
[endedit]
avec pas de différence.
En particulier, à l'aide de la KEYS *
commande:
$ redis-cli
redis 127.0.0.1:6379> keys *
(empty list or set)
mais
redis 127.0.0.1:6379> set stefano test
OK
redis 127.0.0.1:6379> keys *
1) "stefano"
tout de django shell:
In [1]: from django.core.cache import cache
In [2]: cache.keys('*')
Out[2]:
[u'django.contrib.sessions.cachebblhwb3chd6ev2bd85bawuz7g6pgaij8',
u'django.contrib.sessions.cachewpxiheosc8qv5w4v6k3ml8cslcahiwna']
Si je suis en utilisant MONITOR
sur le cli:
redis 127.0.0.1:6379> monitor
OK
1373372711.017761 [1 unix:/tmp/redis_6379.sock] "KEYS" "project_prefix:1:*"
Je peux voir une demande, en utilisant le cache de django préfixe, qui doit prouver le redis-cli est connecté au même service.
Mais même à la recherche de ce préfixe dans le redis-cli
retourne un (empty list or set)
Pourquoi est-ce?
Qu'est-ce que les mécanismes de compartimenter les différentes caches sur le même redis exemple?
- Quelques commentaires sur le redis-cli de commande et les paramètres utilisés, en réponse à une réponse doutes
Vous devez vous connecter pour publier un commentaire.
Je dirais il y a deux possibilités:
1/Le django app ne peut pas se connecter à la Redis instance-vous qu'il est connecté, ou le redis-cli client de lancement ne se connecte pas à la même Redis instance.
Veuillez noter que vous n'utilisez pas exactement le même mécanisme de connexion dans les deux cas. Django utilise un Socket de Domaine Unix, tandis que redis-cli utilise TCP loopback (par défaut). Vous voulez lancer redis-cli en utilisant le même socket chemin, pour être sûr:
Maintenant, puisque vous avez vérifié avec un MONITEUR de commande que vous voyez les commandes envoyées par Django, nous pouvons supposer que vous êtes connecté à l'instance de droite.
2/Il y a un concept de base de données dans le Redis. Par défaut, vous disposez de 16 bases de données distinctes, et de la base de données par défaut est de 0. Le SÉLECTIONNEZ de commande peut être utilisée pour passer d'une session à une autre base de données. Il y a un espace par la base de données.
Les INFOS CLÉS de commande peut être utilisé pour vérifier si certains touches sont définies dans plusieurs bases de données.
Ici, j'ai deux bases de données, nous allons vérifier les clés définies dans la db0 base de données:
et maintenant dans la base de données db1:
Ma suggestion serait également de vérifier si l'application Django envoie toute commande SELECT au moment de la connexion pour le Redis exemple (avec MONITEUR).
Je ne suis pas familier avec Django, mais la façon dont vous avez défini le paramètre d'ENDROIT me fait penser à vos données pourraient être à la base de données 1 (à cause du suffixe).
redis-cli -h TOUCHES "trendingKey*"
De SORTIE
1) "trendingKey:2:1"
2) "trendingKey:trending102:1"
3) "trendingKey:trending101:1"