Redis
 sql >> डेटाबेस >  >> NoSQL >> Redis

रेडिस स्प्रिंग का उपयोग करके रेडिस पर बहु-क्षेत्रीय क्वेरी

स्प्रिंग डेटा रेडिस - 8.5 देखें। सेकेंडरी इंडेक्स और:

  • 8.6. उदाहरण द्वारा प्रश्न
  • 8.10. प्रश्न और प्रश्न विधियाँ

एनोटेशन @Indexed स्प्रिंग डेटा रेडिस (एसडीआर) को हैश के क्षेत्र को अनुक्रमित करने के लिए सेट के रूप में एक द्वितीयक अनुक्रमित बनाने का निर्देश देता है।

इसका मतलब है कि जब आप डेटा डालते हैं, तो SDR 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"

उदाहरण के लिए क्वेरी का उपयोग करना:

आप एक रिपॉजिटरी बनाना चाहते हैं:

interface OrgWorkRepository extends QueryByExampleExecutor<OrgWork> {
}

और फिर नीचे दी गई उदाहरण सेवा में क्वेरी को लागू करें:

class OrgWorkService {

  @Autowired OrgWorkRepository orgWorkRepository;

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

और इस रूप में उपयोग करें:

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

पर्दे के पीछे, SDR आपके डेटा को प्राप्त करने के लिए SINTER और HGETALL के संयोजन का उपयोग करके इसे Redis कमांड में बदलने का ध्यान रखेगा:

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

यह दो चरणों वाली प्रक्रिया है:

  1. सेकेंडरी इंडेक्स के इंटरसेक्शन में निहित कुंजियाँ प्राप्त करें, SINTER . का उपयोग करके
  2. <1> द्वारा लौटाई गई प्रत्येक कुंजी को अलग-अलग प्राप्त करें, HGETALL . का उपयोग करके

यह मानते हुए कि आपके पास एक गुणवत्ता सर्वर, एक उचित डेटासेट आकार है, और क्वेरी औसत रूप से कुछ विशिष्ट हैं, रेडिस के लिए 100,000 प्रति मिनट का कार्यभार प्रबंधनीय होना चाहिए।

SINTER ओ (एन * एम) की सबसे खराब स्थिति है जहां एन सबसे छोटे सेट की कार्डिनैलिटी है और एम सेट की संख्या है। आपकी क्वेरी पर प्रत्येक आयाम के लिए आपके पास एक सेट है।

HGETALL ओ (एन) है जहां एन हैश का आकार है, आपके मामले में 7 है।

हमेशा की तरह, यह अनुशंसा की जाती है कि आप परीक्षण करने के लिए कुछ बेंचमार्किंग करें कि क्या आपको वांछित प्रदर्शन मिल रहा है और यदि आवश्यक हो तो समायोजित करें।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. बहु-थ्रेडेड रेल वातावरण में रेडिस का उपयोग करने का सबसे अच्छा तरीका क्या है? (प्यूमा / साइडकीक)

  2. सर्विसस्टैक:मैन्युअल रूप से सेवा लागू करते समय पाइपलाइन बहाल करें?

  3. अधिकतम प्रयास अपवाद कतार से आगे निकल गए

  4. अपने स्वयं के एडब्ल्यूएस खाते पर रेडिस ™ के लिए स्केलग्रिड होस्टिंग

  5. Redis का उपयोग करके पैटर्न से मेल खाने वाली कुंजियों को परमाणु रूप से कैसे हटाएं