Redis dành cho các trường hợp sử dụng mà bạn cần truy cập và cập nhật dữ liệu với tần suất rất cao và nơi bạn được hưởng lợi từ việc sử dụng cấu trúc dữ liệu (băm, tập hợp, danh sách, chuỗi hoặc tập hợp được sắp xếp). Nó được tạo ra để điền vào các trường hợp sử dụng rất cụ thể. Nếu bạn có một trường hợp sử dụng chung như tìm kiếm rất linh hoạt, bạn sẽ được phục vụ tốt hơn nhiều bởi thứ gì đó được xây dựng cho mục đích này như tìm kiếm đàn hồi hoặc SOLR.
Điều đó có nghĩa là, nếu bạn phải làm điều này trong Redis, đây là cách tôi sẽ thực hiện (giả sử người dùng có thể chia sẻ tên và số điện thoại):
name:some_name -> set([id1, id2, etc...])
name:some_other_name -> set([id3, id4, etc...])
phone:some_phone -> set([id1, id3, etc...])
phone:some_other_phone -> set([id2, id4, etc...])
id1 -> {'name' : 'bob', 'phone' : '123-456-7891', etc...}
id2 -> {'name' : 'alice', 'phone' : '987-456-7891', etc...}
Trong trường hợp này, chúng tôi đang tạo một khóa mới cho mọi tên (có tiền tố là "name:") và mọi số điện thoại (có tiền tố là "phone:"). Mỗi khóa trỏ đến một tập hợp id có tất cả thông tin bạn muốn cho người dùng. Ví dụ:khi bạn tìm kiếm một chiếc điện thoại, bạn sẽ thực hiện:
HGETALL 'phone:123-456-7891'
và sau đó lặp lại các kết quả và trả về bất kỳ thông tin nào trên mỗi (tên trong ví dụ của chúng tôi) bằng ngôn ngữ bạn chọn (bạn có thể thực hiện toàn bộ điều này trong Lua phía máy chủ trên hộp Redis để thậm chí còn nhanh hơn và tránh mạng trở lại- và- ra, nếu bạn muốn):
for id in results:
HGET id 'name'
Chi phí của bạn ở đây sẽ là O(m)
ở đâu m
là số lượng người dùng với số điện thoại đã cho và đây sẽ là một hoạt động rất nhanh trên Redis vì nó được tối ưu hóa tốc độ như thế nào. Nó sẽ là quá mức cần thiết trong trường hợp của bạn vì bạn có thể không cần mọi thứ diễn ra quá nhanh và bạn muốn có tìm kiếm linh hoạt, nhưng đây là cách bạn sẽ làm điều đó.