2011-12-23 34 views
35

Có thể tạo không gian tên trong Redis không?Không gian tên trong Redis?

Từ những gì tôi tìm thấy, tất cả lệnh chung (đếm, xóa tất cả) hoạt động trên tất cả các đối tượng. Có cách nào để tạo các không gian con sao cho các lệnh này sẽ bị giới hạn trong ngữ cảnh không?

Tôi không muốn thiết lập các máy chủ Redis khác nhau cho mục đích này.

Tôi giả sử câu trả lời là "Không", và tự hỏi tại sao điều này không được thực hiện, vì nó có vẻ là một tính năng hữu ích mà không có quá nhiều chi phí.

Trả lời

30

Máy chủ Redis có thể xử lý nhiều cơ sở dữ liệu ... được đánh số. Tôi nghĩ rằng nó cung cấp 32 của chúng theo mặc định; bạn có thể truy cập chúng bằng cách sử dụng tùy chọn -n cho lệnh redis-cli trình tạo tập lệnh shell và bằng các tùy chọn tương tự cho đối số kết nối hoặc sử dụng phương pháp "select()" trên các đối tượng kết nối của nó. (Trong trường hợp này .select() là tên phương pháp cho các mô-đun Python Redis ... Tôi đoán nó được đặt tên tương tự cho các thư viện và các giao diện khác.

Có một tùy chọn để kiểm soát có bao nhiêu cơ sở dữ liệu riêng biệt mà bạn muốn trong tập tin cấu hình cho Tôi không biết giới hạn trên là gì và dường như không có cách nào để tự động thay đổi điều đó (nói cách khác có vẻ như bạn phải tắt máy và khởi động lại máy chủ để Ngoài ra, dường như không có cách nào để kết hợp các số DB này với bất kỳ loại tên nào và cũng không áp đặt các ACLS riêng biệt, cũng như các mật khẩu khác nhau, cho chúng.

+0

Một namespace không phải là một cơ sở dữ liệu, cơ sở dữ liệu được chỉ định bởi số (0 đến 15). Không gian tên được sử dụng để thêm tiền tố – kalelc

+0

@kalelc: Vì thuật ngữ "không gian tên" không được xác định trong tài liệu Redis, tôi không nghĩ rằng ứng dụng của bạn của thuật ngữ ở đây là kinh điển hơn tôi. Tôi đã làm rõ rằng mỗi "cơ sở dữ liệu" trên một máy chủ Redis nhất định là một "không gian tên" độc lập (các phím giống hệt nhau sẽ không va chạm). Rõ ràng bạn có thể tạo các tiền tố tùy ý và coi chúng là "các không gian tên" --- nhưng đây không phải là bất kỳ tính năng được hỗ trợ đặc biệt nào trong Redis; nó chỉ là một quy ước để sử dụng nó. –

+0

Cảm ơn Jim đã làm rõ, Đôi khi khó hiểu khi chúng tôi tìm thấy không gian tên trong Rails with Redis. – kalelc

0

Nếu bạn sử dụng Ruby bạn có thể nhìn vào những viên ngọc:
https://github.com/resque/redis-namespace
https://github.com/jodosha/redis-store

+0

Tôi không, nhưng tôi không hiểu làm thế nào họ có thể làm việc về mặt kỹ thuật. Tôi nghĩ rằng API máy chủ không hỗ trợ chúng. – ripper234

+5

Đây chỉ là những cách để cung cấp một wrapper chủ yếu trong suốt xung quanh đối tượng truy cập/xử lý Redis. Việc sử dụng chúng chỉ đơn giản là thêm bất kỳ tên khóa nào bạn sử dụng trong mã của mình với tiền tố "không gian tên" trong bất kỳ tham chiếu nào tới bất kỳ loại đối tượng nào trong "không gian tên" đó. Khi bạn phỏng đoán không có sự cô lập của những điều này ở phía máy chủ, chúng chỉ tồn tại như các quy ước, có lẽ ngay cả các tiêu chuẩn nội bộ. –

+1

Nó sẽ cho bạn biết ở trên cùng của thư viện 'redis-namespace', đó là một không gian tên của người nghèo, nó sẽ chỉ tiền tố mọi thứ với" ns: * ". –

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