Как показать все ключи через redis-cli?



я использую redis в качестве бэкэнда базы данных в памяти для кэша django.



в частности, я использую Джанго-Рэдис настроить следующим образом:



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


мой Django кэш, кажется, работает правильно.



странно то, что я не могу видеть ключи кэша django с помощью redis-cli командная строка.



[edit]
Пожалуйста, обратите внимание в следующем, что я пробовал оба с



$ redis-cli


и



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


[endedit]



без разницы.



в частности, с помощью :



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


но



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


в то время как из оболочки django:



In [1]: from django.core.cache import cache

In [2]: cache.keys('*')
Out[2]:
[u'django.contrib.sessions.cachebblhwb3chd6ev2bd85bawuz7g6pgaij8',
u'django.contrib.sessions.cachewpxiheosc8qv5w4v6k3ml8cslcahiwna']


если я использую MONITOR на cli:



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


я вижу запрос, используя префикс кэша django; который должен доказать, что redis-cli подключен к той же службе.
Но даже поиск этого префикса в redis-cli возвращает (empty list or set)



почему это?



каковы механизмы, которые разделяют различные кэши на одном экземпляре redis?

1168   2  

2 ответов:

Я бы сказал, что есть две возможности:

1 / приложение django может не подключаться к экземпляру Redis, к которому, по вашему мнению, оно подключено, или клиент redis-cli, который вы запускаете, не подключается к тому же экземпляру Redis.

обратите внимание, что вы не используете один и тот же точный механизм подключения в обоих случаях. Django использует сокет домена Unix, в то время как redis-cli использует замыкание на себя TCP (по умолчанию). Вы можете запустить redis-cli, используя тот же путь сокета, чтобы быть конечно:

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

теперь, когда вы проверили с помощью команды монитора, что вы видите команды, отправленные Django, мы можем предположить, что вы подключены к нужному экземпляру.

2 / в Redis существует концепция базы данных. По умолчанию у вас есть 16 различных баз данных, а текущая база данных по умолчанию равна 0. Элемент выберите команда может использоваться для переключения сеанса в другую базу данных. Существует одно пространство ключей для каждой базы данных.

команда INFO KEYSPACE может быть используется для проверки того, определены ли некоторые ключи в нескольких базах данных.

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

здесь у меня есть две базы данных, давайте проверим ключи, определенные в базе данных db0:

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

и теперь в базе данных db1:

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

мое предложение было бы также проверить, отправляет ли приложение Django какую-либо команду SELECT во время подключения к экземпляру Redis (с монитором).

Я не знаком с Django, но то, как вы определили местоположение параметр заставляет меня думать, что ваши данные могут быть в базе данных 1 (из-за суффикса).

redis-cli-H клавиши " trendingKey*"

выход 1) "trendingKey:2:1" 2) " trendingKey: trending102:1" 3)" trendingKey:trending101:1"

Comments

    Ничего не найдено.