Как показать все ключи через 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?
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