Redis
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> Redis

Truy vấn đa trường trên Redis bằng Redis Spring

Xem Spring Data Redis - 8.5. Chỉ mục phụ và:

  • 8.6. Truy vấn bằng ví dụ
  • 8.10. Truy vấn và phương thức truy vấn

Chú thích @Indexed hướng dẫn Spring Data Redis (SDR) tạo một tập hợp được lập chỉ mục thứ cấp dưới dạng một tập hợp để lập chỉ mục trường băm.

Điều này có nghĩa là khi bạn chèn dữ liệu, SDR sẽ chạy bảy lệnh tới Redis:

HMSET "OrgWork:19315449-cda2-4f5c-b696-9cb8018fa1f9" "_class" "OrgWork" 
    "id" "19315449-cda2-4f5c-b696-9cb8018fa1f9" 
    "CorpDetails" "CorpDetailsValueHere" "ContractType" "ContractTypeValueHere" 
    ... "Country" "Costa Rica"
SADD  "OrgWork" "19315449-cda2-4f5c-b696-9cb8018fa1f9"                           
SADD  "OrgWork:CorpDetails:CorpDetailsValueHere" "19315449-cda2-4f5c-b696-9cb8018fa1f9"
SADD  "OrgWork:ContractType:ContractTypeValueHere" "19315449-cda2-4f5c-b696-9cb8018fa1f9"
...
SADD  "OrgWork:Country:Costa Rica" "19315449-cda2-4f5c-b696-9cb8018fa1f9"

Sử dụng truy vấn theo ví dụ:

Bạn muốn tạo một kho lưu trữ:

interface OrgWorkRepository extends QueryByExampleExecutor<OrgWork> {
}

Và sau đó triển khai truy vấn như trong dịch vụ mẫu bên dưới:

class OrgWorkService {

  @Autowired OrgWorkRepository orgWorkRepository;

  List<OrgWork> findOrgWorks(OrgWork probe) {
    return orgWorkRepository.findAll(Example.of(probe));
  }
}

Và sử dụng như:

OrgWork orgWorkExample = new OrgWork();                          
orgWorkExample.setCorpDetails("CorpDetailsValueHere"); 
orgWorkExample.setContractType("ContractTypeValueHere");
...
List<OrgWork> results = orgWorkService.findOrgWorks(orgWorkExample);

Đằng sau hậu trường, SDR sẽ xử lý việc chuyển đổi lệnh này thành lệnh Redis để lấy dữ liệu của bạn, sử dụng kết hợp SINTER và HGETALL:

SINTER   …:CorpDetails:CorpDetailsValueHere   …:ContractType:ContractTypeValueHere   ...
HGETALL "OrgWork:d70091b5-0b9a-4c0a-9551-519e61bc9ef3" 
HGETALL ...

Đây là một quy trình gồm hai bước:

  1. Tìm nạp các khóa có trong giao điểm của các chỉ mục phụ, sử dụng SINTER
  2. Tìm nạp từng khóa do <1> trả về riêng lẻ, sử dụng HGETALL

Redis có thể quản lý khối lượng công việc 100.000 mỗi phút, giả sử bạn có một máy chủ chất lượng, kích thước tập dữ liệu hợp lý và các truy vấn ở mức trung bình hơi cụ thể.

SINTER có độ phức tạp thời gian là O (N * M) trong trường hợp xấu nhất, trong đó N là tổng số của bộ nhỏ nhất và M là số bộ. Bạn có một bộ cho mọi thứ nguyên trong truy vấn của mình.

HGETALL là O (N) trong đó N là kích thước của hàm băm, trong trường hợp của bạn là 7.

Như mọi khi, bạn nên thực hiện một số phép đo điểm chuẩn để kiểm tra xem bạn có đạt được hiệu suất mong muốn hay không và điều chỉnh nếu cần.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Không thể kết nối với Redis tại 10.XX.XX.28:6379:Lỗi không xác định - khi truy cập từ Spring Batch hoặc máy windows

  2. Tính khả dụng cao với Redis Sentinels:Kết nối với Redis Master / Slave Sets

  3. máy chủ mùa xuân không thể kết nối với redis bằng ứng dụng khách jedis

  4. Đặt đường dẫn động trong redis.conf bằng cách sử dụng biến Môi trường

  5. redis:sao lưu dump.rdb