2012-01-05 40 views
10

Tôi đã lưu dữ liệu bằng dấu chấm phẩy.Tìm khóa bằng ký tự đại diện

redis> keys party:* 

1) "party:congress:president" 
2) "party:bjp:president" 
3) "party:bjp" 
4) "party:sena" 

Có lệnh nào liệt kê tất cả các bên không? Trong trường hợp ví dụ trên, tôi mong đợi

congress 
bjp 
sena 
+1

Bạn phải duy trì danh sách riêng biệt cho điều đó, nó không đắt tiền –

Trả lời

18

Không, không có lệnh nào để làm điều đó. Nhưng nó sẽ là tầm thường để thực hiện nó trên phía khách hàng, nếu bạn thực sự phải.

Ứng dụng sẽ không bao giờ sử dụng các lệnh KEYS để truy xuất dữ liệu. KEYS khóa toàn bộ phiên bản Redis trong khi nó quét tuyến tính hàng triệu khóa bạn đã lưu trữ. Đó là một lệnh gỡ lỗi được cho là được sử dụng trong các công cụ quản trị.

Với Redis, không có cấu trúc btree chỉ mục các phím, vì vậy bạn không thể truy vấn cho các phím, ngoại trừ nếu phím của bạn được lưu trữ trong một bộ sưu tập hiện có (bộ, zset, vv ...)

+0

Tôi thấy trong [câu trả lời này] (http://stackoverflow.com/a/30490869/1041046) có thể tìm kiếm bằng một phần khóa. Vì tôi chỉ học về redis, tôi không chắc nó chính xác như thế nào. Tôi nghĩ bạn có thể cần phải cập nhật câu trả lời của mình để bao gồm thêm chi tiết. – AaA

+0

Có thể tìm kiếm bằng khóa một phần, không thể tìm kiếm hiệu quả bằng khóa từng phần, trừ khi bạn tạo một cấu trúc dữ liệu cho điều này một cách rõ ràng. Hơn nữa, câu hỏi ban đầu ở đây không phải là về tìm kiếm, nhưng về thao tác của kết quả (được thực hiện tốt hơn trên phía máy khách). –

+0

Điểm tốt, tôi đang tìm kiếm tìm kiếm một phần trong khóa và đây là kết quả thứ hai trong google. – AaA

1

Tôi nghĩ nếu bạn muốn nhận dữ liệu 'bên' từ redis thì mỗi khi bạn lưu dữ liệu thông thường của mình, bạn cũng lưu tên bên vào danh sách bên, sau đó bạn có thể dễ dàng lấy tên bên

4

Bạn có thể sử dụng lệnh QUÉT để quay lại tìm kiếm các khóa mà không chặn toàn bộ cơ sở dữ liệu.

redis SCAN docs

Lệnh này có một bộ lọc Đội hình thi đấu tùy chọn hoạt động giống như các bộ lọc trên lệnh PHÍM.

redis> SCAN 0 MATCH party:* 

1) <the cursor> 
2) 1) "party:congress:president" 
    2) "party:bjp:president" 
    3) "party:bjp" 
    4) "party:sena" 

tiếp tục gọi đến khi con trỏ trả về 0 để có được tất cả các bên (có thể không có được tất cả các bên nếu họ đang được chèn trong khi bạn đang quét)

sẵn từ 2,8

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