query pattern keys cli basics all django redis

django - pattern - redis search key



¿Cómo mostrar TODAS las teclas a través de redis-cli? (2)

Yo diría que hay dos posibilidades:

1 / Es posible que la aplicación django no se conecte a la instancia de Redis a la que cree que está conectada, o que el cliente redis-cli que inicie no se conecte a la misma instancia de Redis.

Tenga en cuenta que no utiliza el mismo mecanismo de conexión en ambos casos. Django usa un Socket de dominio de Unix, mientras que redis-cli usa el bucle de retorno de TCP (por defecto). Es posible que desee iniciar redis-cli utilizando la misma ruta de socket, para estar seguro:

$ redis-cli -s /tmp/redis_6379.sock

Ahora que ha verificado con un comando MONITOR que ve los comandos enviados por Django, podemos asumir que está conectado a la instancia correcta.

2 / Hay un concepto de base de datos en Redis. De forma predeterminada, tiene 16 bases de datos distintas y la base de datos predeterminada actual es 0. El comando SELECT se puede usar para cambiar una sesión a otra base de datos. Hay un espacio de teclas por base de datos.

El comando INFO KEYSPACE se puede usar para verificar si algunas claves están definidas en varias bases de datos.

redis 127.0.0.1:6379[1]> info keyspace # Keyspace db0:keys=1,expires=0 db1:keys=1,expires=0

Aquí tengo dos bases de datos, verifiquemos las claves definidas en la base de datos db0:

redis 127.0.0.1:6379> keys * 1) "foo"

y ahora en la base de datos db1:

redis 127.0.0.1:6379> select 1 OK redis 127.0.0.1:6379[1]> keys * 1) "bar"

Mi sugerencia sería también verificar si la aplicación Django envía algún comando SELECT en el momento de la conexión a la instancia de Redis (con MONITOR).

No estoy familiarizado con Django, pero la forma en que ha definido el parámetro LOCATION me hace pensar que sus datos podrían estar en la base de datos 1 (debido al sufijo).

Estoy usando redis como base de datos en memoria para el caché de django.

En particular, uso django-redis configurado de la siguiente manera:

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'', }, }, }

Mi caché de django parece funcionar correctamente.

Lo extraño es que no puedo ver las claves de caché de django usando la línea de comandos redis-cli .

[editar] Por favor note en lo siguiente que probé ambos con

$ redis-cli

y

$ redis-cli -s /tmp/redis_6379.sock

[terminé]

sin diferencia

En particular, usando el comando KEYS * :

$ redis-cli redis 127.0.0.1:6379> keys * (empty list or set)

pero

redis 127.0.0.1:6379> set stefano test OK redis 127.0.0.1:6379> keys * 1) "stefano"

mientras que desde 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 estoy usando MONITOR en el cli:

redis 127.0.0.1:6379> monitor OK 1373372711.017761 [1 unix:/tmp/redis_6379.sock] "KEYS" "project_prefix:1:*"

Puedo ver una solicitud, usando el prefijo de caché django; Lo que debería probar que el redis-cli está conectado al mismo servicio. Pero incluso buscar ese prefijo en el redis-cli devuelve un (empty list or set)

¿Porqué es eso?

¿Cuáles son los mecanismos que compartimentan los diferentes cachés en la misma instancia de redis?


teclas redis-cli -h "trendingKey *"

SALIDA 1) "trendingKey: 2: 1" 2) "trendingKey: trending102: 1" 3) "trendingKey: trending101: 1"