如何通过redis-cli显示所有密钥?
我正在使用redis作为djangocaching的内存数据库后端。
特别是我用django-redisconfiguration如下:
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', }, }, }
我的Djangocaching似乎正常工作。
奇怪的是我无法使用redis-cli
命令行查看djangocaching键。
请注意在下面,我尝试了两个
$ redis-cli
和
$ redis-cli -s /tmp/redis_6379.sock
[EndEdit中]
没有区别。
特别是使用KEYS *
命令:
$ 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']
如果我在cli上使用MONITOR
:
redis 127.0.0.1:6379> monitor OK 1373372711.017761 [1 unix:/tmp/redis_6379.sock] "KEYS" "project_prefix:1:*"
我可以看到使用djangocaching前缀的请求; 这应该certificateredis-cli连接到相同的服务。 但是,即使在redis-cli
search该前缀,也会返回(empty list or set)
这是为什么?
什么是在同一个redis实例上划分不同caching的机制?
我会说有两种可能性:
1 / django应用程序可能无法连接到您认为已连接的Redis实例,或者您启动的redis-cli客户端未连接到相同的Redis实例。
请注意,在这两种情况下,您都不要使用相同的连接机制。 Django使用Unix域套接字,而redis-cli使用TCP环回(默认情况下)。 您可能想要使用相同的套接字path启动redis-cli,以确保:
$ redis-cli -s /tmp/redis_6379.sock
现在,由于您已经使用MONITOR命令validation了您看到了由Django发送的命令,因此我们可以假定您已连接到正确的实例。
2 / Redis中有一个数据库概念。 默认情况下,您有16个不同的数据库,并且当前的默认数据库为0. SELECT命令可用于将会话切换到另一个数据库。 每个数据库有一个密钥空间。
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"
我的build议也是检查Django应用程序是否在连接时将任何SELECT命令发送到Redis实例(使用MONITOR)。
我不熟悉Django,但是你定义LOCATION参数的方式让我觉得你的数据可能在数据库1(由于后缀)。
redis-cli -h KEYS“trendingKey *”
输出1)“趋势键:2:1”2)“趋势键:趋势102:1”3)“趋势键:趋势101:1”
- Django倾倒单个模型的数据?
- DatabaseError:当前事务中止,忽略命令,直到事务块结束
- gunicorn.errors.HaltServer:<HaltServer'Worker无法启动。 3> django
- 在Django中,如何使用dynamic字段查找过滤QuerySet?
- 我可以在Python3.x上使用Django(dev 1.6.x)上的MySQL吗?
- 什么是正确的方式来validation,如果一个对象存在于Django视图而不返回404?
- Django – “no module named django.core.management”
- debuggingApache / Django / WSGI错误请求(400)错误
- 按字段获取不同的Queryset值