2012-01-16 32 views
8

Điều gì đó luôn luôn xảy ra với bộ dữ liệu của chúng tôi tại nơi làm việc là cần truy vấn một loạt các giá trị được cung cấp cho một loạt các khóa. Phạm vi ngày là một ví dụ rõ ràng.Lấy một loạt các phím với redis?

Tôi biết bạn có thể sử dụng timestamps unix và một bộ sắp xếp để truy vấn bởi phạm vi ngày, nhưng có vẻ như khó chịu, bởi vì tôi sẽ phải hoặc là

  1. đưa toàn bộ tài liệu như giá trị trong tập sắp xếp hoặc
  2. chỉ cần đặt id vào trong đó, sau đó hỏi lại cho mỗi khóa.

Có thể tùy chọn 2 là tiêu chuẩn? Có cách nào để hỏi redis cho nhiều phím cùng một lúc? Giống như truy vấn $ của mongodb? Hoặc có lẽ yêu cầu cho một loạt các phím trong một đường ống chỉ là nhanh?

+0

phương án 2 là tiêu chuẩn. có một MGET cho nhiều khóa. http://redis.io/topics/twitter-clone –

Trả lời

6

Tùy chọn 2, đặt Id vào bộ được sắp xếp rồi sử dụng mget để lấy giá trị, nếu khóa của bạn là băm thì bạn cần phát hành nhiều hget, nhưng lợi thế là bạn có thể lấy ra các phần cụ thể của đối tượng mà bạn thực sự cần thay vì mọi thứ. Nó rất nhanh trong thực tế.

+0

Thú vị. Tôi tưởng tượng bạn cũng muốn sử dụng đường ống? Có thể tôi sẽ muốn thường xuyên lấy ra 100 giá trị theo cách này. Có vẻ như điều này cũng có thể xảy ra với SORT, đúng không? Có chậm hơn không? –

+1

Tùy thuộc vào ngôn ngữ/thư viện bạn đang sử dụng pipelining thường được xây dựng trong, ví dụ cho node.js node_redis sẽ làm điều đó cho bạn mà không cần thêm nỗ lực nào. Bạn cũng có thể sử dụng thủ thuật sắp xếp nhưng tôi không chắc liệu nó có thực sự nhanh hơn theo bất kỳ cách nào có thể đo lường được hay không. Rất thích nhìn thấy một số điểm chuẩn cho nó. –

+0

Bạn nên sử dụng pipelining, tôi đo hiệu suất của nó và nó nhanh hơn khoảng 5 lần so với các khóa 10k, kết quả trên blog của tôi http://blog.jmoz.co.uk/python-redis-py-pipeline – jmoz

1

Có thể một số phép thuật bash sẽ giúp ích?

echo 'keys YOURKEY*' | redis-cli | sed 's/^/get /' | redis-cli 

chí đầu ra này các dữ liệu từ tất cả các phím mà bắt đầu với YOURKEY

+4

** Quan trọng lưu ý: ** Lệnh 'KEYS' đang chặn và có thể mất nhiều thời gian nếu bạn có nhiều dữ liệu. Bạn có thể gỡ xuống các máy chủ/ứng dụng theo cách này. – ceejayoz

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