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

रेडिस - क्रमबद्ध सेट, संपत्ति मूल्य द्वारा आइटम ढूंढें

मुझे लगता है कि यह बहुत आसान है।

समाधान 1(अवर, अनुशंसित नहीं)

आपका तरीका ZSCAN MySet 0 MATCH Id:92 count 1 काम नहीं किया क्योंकि संग्रहित स्ट्रिंग "{\"Id\":\"92\"... है नहीं "{\"Id:92\"... . स्ट्रिंग को दूसरे प्रारूप में बदल दिया गया है। तो MATCH Id\":\"64 . का उपयोग करने का प्रयास करें या ऐसा कुछ रेडिस में जेसन क्रमबद्ध डेटा से मेल खाने के लिए। मैं json.net से परिचित नहीं हूं, इसलिए वास्तविक स्ट्रिंग आपको खोजने के लिए छोड़ देती है।

वैसे, मैं आपसे पूछना चाहता हूँ ZSCAN MySet 0 MATCH Id:92 count 1 एक कर्सर वापस करें? मुझे संदेह है कि आपने ZSCAN . का उपयोग किया है गलत तरीके से।

समाधान 2(बेहतर, दृढ़ता से अनुशंसित)

ZSCAN अच्छा है जब आपका सॉर्ट किया गया सेट बड़ा नहीं है और आप जानते हैं कि रेडिस के लुआ लेनदेन द्वारा नेटवर्क राउंडट्रिप समय को कैसे बचाया जाए। यह अभी भी "आईडी द्वारा देखें" ऑपरेशन ओ (एन) बनाता है। इसलिए, एक बेहतर उपाय यह है कि आप अपने डेटा मॉडल को निम्न तरीके से बदलें:

क्रमबद्ध सेट से बदलें

#   Score   Value
0   1443476076 {"Id":"92","Ref":"7ADT","DTime":1443476076,"ATime":1443901554,"ExTime":0,"SPName":"7ADT33CFSAU6","StPName":"7ADT33CFSAU6"}
1   1443482969 {"Id":"11","Ref":"DAJT","DTime":1443482969,"ATime":1443901326,"ExTime":0,"SPName":"DAJTJTT4T02O","StPName":"DAJTJTT4T02O"}

करने के लिए

#   Score   Value
0   1443476076 Id:92
1   1443482969 Id:11

बाकी विस्तृत डेटा को हैश टाइप कीज़ के दूसरे सेट में ले जाएँ:

#   Key   field-value field-value ...
0   Id:92 Ref-7ADT DTime-1443476076 ...
1   Id:11 Ref-7ADT DTime-1443476076 ...

फिर, आप hgetall id:92 . करके आईडी के आधार पर पता लगाते हैं . तिथि के अनुसार श्रेणीबद्ध क्वेरी के लिए, आपको ZRANGEBYSCORE sortedset mindate maxdate करने की आवश्यकता है फिर hgetall हर आईडी एक के बाद एक। बेहतर होगा कि आप इन आदेशों को एक में लपेटने के लिए लुआ का उपयोग करें और यह अभी भी बहुत तेज़ होगा!

NoSql डेटाबेस में डेटा को ऊपर की तरह बेमानी तरीके से व्यवस्थित करने की आवश्यकता है। इससे कुछ सामान्य ऑपरेशन में एक से अधिक कमांड और राउंडट्रिप शामिल हो सकते हैं, लेकिन इसे रेडिस के लुआ फीचर से निपटा जा सकता है। मैं रेडिस के लुआ फीचर की पुरजोर अनुशंसा करता हूं, क्योंकि यह कमांड को एक नेटवर्क राउंडट्रिप में लपेटता है, जो सभी रेडिस-सर्वर साइड पर निष्पादित होते हैं और परमाणु और सुपर फास्ट होते हैं!

अगर आप कुछ नहीं जानते हैं तो जवाब दें




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. लुआ स्क्रिप्ट ब्लॉक रेडिस-सर्वर क्यों?

  2. रेडिस मास इंसर्शन

  3. रेडिस स्टोर क्लाइंट में कुंजी/मूल्य जोड़ी में मूल्य से कुंजी कैसे प्राप्त करें?

  4. रेडिस के साथ वितरित लॉक कैसे बनाएं?

  5. रेडिस में एक निश्चित आकार का क्रमबद्ध सेट?