2013-07-09 38 views
50

Tôi đang sử dụng redis dưới dạng bộ đệm cơ sở dữ liệu trong bộ nhớ cho bộ nhớ đệm django.Làm thế nào để hiển thị TẤT CẢ các phím thông qua redis-cli?

Đặc biệt, tôi sử dụng django-redis cấu hình như sau:

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

bộ nhớ cache django tôi dường như để làm việc một cách chính xác.

Điều kỳ lạ là tôi không thể thấy các phím bộ nhớ đệm django sử dụng dòng lệnh redis-cli.

[sửa] Xin lưu ý trong những điều sau đây mà tôi đã cố gắng cả với

$ redis-cli 

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

[EndEdit]

không có sự khác biệt.

Đặc biệt, sử dụng KEYS * lệnh:

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

nhưng

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

khi từ vỏ 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'] 

Nếu tôi đang sử dụng MONITOR trên cli:

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

Tôi có thể thấy yêu cầu, sử dụng tiền tố bộ đệm django; mà nên chứng minh redis-cli được kết nối với cùng một dịch vụ. Nhưng ngay cả khi tìm kiếm tiền tố đó trong số redis-cli trả về một số (empty list or set)

Tại sao lại như vậy?

Các cơ chế nào ngăn cách các bộ đệm khác nhau trên cùng một cá thể redis?

+0

Một số nhận xét về lệnh redis-cli và tham số được sử dụng để trả lời câu trả lời nghi ngờ – Stefano

Trả lời

65

tôi sẽ nói có hai khả năng:

1/Ứng dụng django có thể không kết nối với các trường hợp Redis bạn nghĩ rằng nó được kết nối với, hoặc khách hàng redis-cli bạn khởi động không kết nối với cùng Ví dụ về lại.

Xin lưu ý rằng bạn không sử dụng cùng một cơ chế kết nối chính xác trong cả hai trường hợp. Django sử dụng một Unix Domain Socket, trong khi redis-cli sử dụng TCP loopback (theo mặc định). Bạn có thể muốn để khởi động redis-cli sử dụng con đường cùng một ổ cắm, để chắc chắn:

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

Bây giờ kể từ khi bạn đã xác minh với một lệnh MONITOR mà bạn nhìn thấy các lệnh gửi bởi Django, chúng ta có thể giả sử bạn được kết nối với đúng ví dụ.

2/Có khái niệm cơ sở dữ liệu trong Redis.Theo mặc định, bạn có 16 cơ sở dữ liệu riêng biệt và cơ sở dữ liệu mặc định hiện tại là 0. Lệnh SELECT có thể được sử dụng để chuyển một phiên sang cơ sở dữ liệu khác. Có một keyspace cho mỗi cơ sở dữ liệu.

Lệnh INFO KEYSPACE có thể được sử dụng để kiểm tra xem một số khóa có được xác định trong một số cơ sở dữ liệu hay không.

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

Ở đây tôi có hai cơ sở dữ liệu, chúng ta hãy kiểm tra các phím định nghĩa trong cơ sở dữ liệu db0:

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

và bây giờ trong cơ sở dữ liệu db1:

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

Đề nghị của tôi sẽ còn kiểm tra xem ứng dụng Django có gửi bất kỳ lệnh SELECT nào tại thời gian kết nối tới cá thể Redis (với MONITOR) hay không.

Tôi không quen với Django, nhưng cách bạn đã xác định tham số LOCATION khiến tôi nghĩ rằng dữ liệu của bạn có thể nằm trong cơ sở dữ liệu 1 (do hậu tố).

+1

Cảm ơn Didier. Tôi đã loại trừ 1) bởi vì tôi cũng đã cố gắng kết nối trực tiếp với ổ cắm và tôi thấy không có sự khác biệt. Nhưng tôi không biết về lệnh "SELECT"! Đó là hoàn toàn nó! Làm việc ngay bây giờ ... Tôi phải nói rằng Redis tài liệu về điểm này không phải là rất rõ ràng .. Ngay cả khi kiểm tra các [Redis SELECT] (http://redis.io/commands/select) lệnh doc cho thấy một loạt các ý kiến ​​lẫn lộn ! – Stefano

+0

Đã thêm một liên kết đến tài liệu lệnh "SELECT" cho câu trả lời của bạn, nhưng tôi KHÔNG THỂ TÌM HIỂU bất kỳ tham chiếu chính thức nào tới nhiều cơ sở dữ liệu. Có lẽ nó chỉ là tôi, nếu bạn biết nó, bạn có thể xin vui lòng thêm liên kết? Cảm ơn! – Stefano

+1

Tôi e rằng không có trang chuyên dụng mô tả cơ sở dữ liệu. Có một bình luận hữu ích trong tập tin cấu hình mặc dù: https://github.com/antirez/redis/blob/unstable/redis.conf#L86 –

2

redis-cli KEYS -h "trendingKey *"

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

Các vấn đề liên quan