खोज…


परिचय

Redis keyspace डेटाबेस में डेटा संरचनाओं के लिए हैश टेबल या शब्दकोश मैपिंग कुंजी के रूप में सोचा जा सकता है।

रेडिस कमांड की एक विस्तृत श्रृंखला प्रदान करता है जो कीस्पेस को प्रबंधित करने के लिए कुंजी के साथ काम करता है, जिसमें चाबियाँ निकालने की क्षमता, कुंजी मेटाडेटा का निरीक्षण, कुंजी की खोज और कुंजी के कुछ गुणों को संशोधित करना शामिल है।

वाक्य - विन्यास

  • कुंजी पैटर्न
  • PERSIST कुंजी
  • महत्वपूर्ण सेकंड का विस्तार करें
  • EXPIREAT कुंजी टाइमस्टैम्प
  • टीटीएल कुंजी
  • PEXPIRE प्रमुख मिलीसेकंड
  • PEXPIREAT कुंजी मिलीसेकंड-टाइमस्टैम्प
  • PTTL कुंजी
  • UNLINK कुंजी [कुंजी ...]
  • DEL कुंजी [कुंजी ...]
  • स्कैन कर्सर [MATCH पैटर्न] [COUNT गणना]

टिप्पणियों

Redis कुंजियों में मान्य वर्णों के लिए, मैनुअल इसे पूरी तरह से समझाता है :

रेडिस कुंजी बाइनरी सुरक्षित हैं, इसका मतलब है कि आप किसी भी बाइनरी अनुक्रम को एक कुंजी के रूप में "फू" जैसे जेपीईजी फ़ाइल की सामग्री से उपयोग कर सकते हैं। खाली स्ट्रिंग भी एक मान्य कुंजी है।

चाबियों के बारे में कुछ अन्य नियम:

उदाहरण के लिए बहुत लंबी चाबियाँ एक अच्छा विचार नहीं हैं, उदाहरण के लिए 1024 बाइट्स की एक कुंजी न केवल स्मृति-वार है, बल्कि इसलिए भी कि डेटासेट में कुंजी की खोज के लिए कई महंगी कुंजी-तुलनाओं की आवश्यकता हो सकती है। यहां तक कि जब हाथ में कार्य एक बड़े मूल्य के अस्तित्व से मेल खाता है, तो हैशिंग का सहारा लेना (उदाहरण के लिए SHA1 के साथ) एक बेहतर विचार है, खासकर स्मृति और बैंडविड्थ के दृष्टिकोण से।

बहुत कम कुंजी अक्सर एक अच्छा विचार नहीं है। "U1000flw" को एक कुंजी के रूप में लिखने का बहुत कम मतलब है यदि आप इसके बजाय "उपयोगकर्ता: 1000: अनुयायी" लिख सकते हैं। उत्तरार्द्ध अधिक पठनीय है और जोड़ा स्थान कुंजी वस्तु और मूल्य वस्तु द्वारा उपयोग किए गए स्थान की तुलना में मामूली है। जबकि छोटी चाबियाँ स्पष्ट रूप से थोड़ी कम मेमोरी का उपभोग करेंगी, आपका काम सही संतुलन खोजना है।

एक स्कीमा के साथ छड़ी करने का प्रयास करें। उदाहरण के लिए "ऑब्जेक्ट-टाइप: आईडी" एक अच्छा विचार है, जैसा कि "उपयोगकर्ता: 1000" में है। बहु-शब्द फ़ील्ड के लिए अक्सर डॉट्स या डैश का उपयोग किया जाता है, जैसा कि "टिप्पणी: 1234: उत्तर.तो" या "टिप्पणी: 1234: उत्तर-में"।

अधिकतम अनुमत कुंजी का आकार 512 एमबी है।

एक उत्पादन प्रणाली के खिलाफ KEYS कमांड का उपयोग करने के साथ सावधान रहें, यह गंभीर प्रदर्शन समस्याओं का कारण बन सकता है। यदि आपको कीस्पेस के विरुद्ध खोज करने की आवश्यकता है तो SCAN कमांड एक बेहतर विकल्प है।

मान्य कुंजी

रेडिस कुंजी बाइनरी-सुरक्षित हैं, इसलिए शाब्दिक रूप से कुछ भी कुंजी के रूप में उपयोग किया जा सकता है। एकमात्र सीमाएं यह हैं कि उन्हें 512MB से कम होना चाहिए।

मान्य कुंजी के उदाहरण:

7
++++
`~!@#$%^&*()-_=+
user:10134
search/9947372/?query=this%20is%20a%28test%29%20query
<div id="div64">

Any other string less than 512MB in size.
The raw binary content of an image or other binary file.
An entire multi-line text document.
An entire SQL query.
Any integer, hexadecimal, octal, or binary value.
Anything else you can think of less than 512MB in size. 

अमान्य Redis कुंजियाँ:

Anything larger than 512MB.

प्रमुख नामकरण योजनाएँ

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

user:10134
user:10134:favorites
user:10134:friends
user:10134:friends-of-friends

user:10134
user:10134/favorites
user:10134/friends
user:10134/friends.of.friends

user/10134
user/10134/favorites
user/10134/friends
user/10134/friends of friends

ध्यान दें, जबकि अनुमति दी जाती है, बड़ी कुंजियाँ अधिक मेमोरी का उपयोग करती हैं और धीमी लुकअप समय में परिणाम करती हैं, इसलिए 500MB कुंजी का उपयोग करना प्रदर्शन के लिए एक महान विचार नहीं हो सकता है। एक बेहतर विचार एक SHA-1, SHA-256, या MD5 हैश के बजाय एक प्रमुख बाइनरी ऑब्जेक्ट का उपयोग करने के लिए हो सकता है:

image/9517bb726d33efdc503a43582e6ea2eea309482b
image52e9df0577fca2ce022d4e8c86b1eccb070d37bef09dec36df2fabbfa7711f5c

सभी कुंजियों को सूचीबद्ध करना

आप Redis-cli से निम्नलिखित कमांड्स निष्पादित करके Redis डेटाबेस में सभी कुंजियों को सूचीबद्ध कर सकते हैं:

KEYS *

KEYS का पैरामीटर एक ग्लोब-स्टाइल पैटर्न मिलान अभिव्यक्ति है। सपोर्टेड पैटर्न के उदाहरणों में शामिल हैं:

h?llo matches hello, hallo and hxllo
h*llo matches hllo and heeeello
h[ae]llo matches hello and hallo, but not hillo
h[^e]llo matches hallo, hbllo, ... but not hello
h[a-b]llo matches hallo and hbllo

KEYS * कमांड के उपयोग से प्रदर्शन पर प्रतिकूल प्रभाव पड़ सकता है, इसलिए इसे उत्पादन उदाहरणों के विरुद्ध अनुशंसित नहीं किया जाता है। उत्पादन कोड में कुंजियों की खोज करने के लिए SCAN ऑपरेशन का उपयोग करें।

टीटीएल और कुंजी समाप्ति

कुंजी के समाप्ति मूल्यों को अपडेट कमांड के बाहर एक उपयोगकर्ता द्वारा प्रबंधित किया जा सकता है। रेडिस एक उपयोगकर्ता को टीटीएल कमांड का उपयोग करके कुंजी का लाइव (टीटीएल) वर्तमान समय निर्धारित करने की अनुमति देता है:

TTL key

यह कमांड सेकंड में कुंजी की TTL लौटाएगा या विशेष मान -1 या -2 लौटाएगा। एक -1 इंगित करता है कि कुंजी लगातार है (समाप्त नहीं होगी) और -2 इंगित करता है कि कुंजी मौजूद नहीं है।

एक समाप्ति कुंजी को PERSIST कमांड का उपयोग करके लगातार बनाया जा सकता है:

PERSIST KEY

और EXPIRE कमांड का उपयोग कर समाप्त करने के लिए एक सतत कुंजी बनाई जा सकती है:

EXPIRE KEY seconds

मौजूदा कुंजी के TTL को संशोधित करने के लिए भी एक्सपायर का उपयोग किया जा सकता है। वैकल्पिक रूप से, आप समय समाप्त करने के लिए एक UNIX टाइमस्टैम्प के साथ EXPIREAT कमांड का उपयोग कर सकते हैं।

टीटीएल, EXPIRE और EXPIREAT कमांड के मिलीसेकंड संस्करण हैं जो एक पी के साथ उपसर्ग हैं।

हटाने की कुंजी

Redis डेटाबेस से कुंजियाँ हटाने के लिए दो कार्य प्रदान करता है: डेल और अनलिंक।

डेल फ़ंक्शन डेटाबेस से एक या अधिक कुंजी निकालता है। डेल कमांड Redis को तुरंत निष्पादन की वर्तमान थ्रेड पर हटाए गए कुंजी के लिए मेमोरी को पुनः प्राप्त करने का कारण बनता है। डेल के लिए निष्पादन का समय सभी कुंजी से हटाए गए व्यक्तिगत तत्वों की संख्या के लिए आनुपातिक है।

अनलिंक फ़ंक्शन डेल कमांड की तरह कार्य करता है, यह डेटाबेस से एक या अधिक कुंजी निकालता है। हालांकि, डेल कमांड के विपरीत, उन कुंजियों द्वारा उपयोग की जाने वाली किसी भी मेमोरी को दूसरे धागे पर अतुल्यकालिक रूप से पुनर्प्राप्त किया जाता है।

रेडिस कीस्पेस को स्कैन करना

Redis एक विशेष पैटर्न से मेल खाते डेटाबेस में कुंजियों पर पुनरावृति करने के लिए SCAN कमांड प्रदान करता है। Redis SCAN कमांड में ग्लोब स्टाइल पैटर्न से मेल खाता है।

SCAN कमांड Redis keyspace पर कर्सर आधारित पुनरावृत्ति प्रदान करता है। SCAN के लिए पुनरावृत्त कॉल अनुक्रम उपयोगकर्ता के साथ शुरू होता है जो कर्सर तर्क के साथ एक कॉल करता है। उस कॉल का परिणाम आइटमों का एक बैच है और एक अपडेट किया गया कर्सर है जो SCAN के अगले कॉल के लिए आपूर्ति की जाती है। यह पुनरावृत्ति तब तक जारी रहती है जब तक कि रेडिस 0 कर्सर नहीं लौटाता।

निम्नलिखित पायथन फ़ंक्शन SCAN के मूल उपयोग को प्रदर्शित करता है:

def scan_keys(r, pattern):
    "Returns a list of all the keys matching a given pattern"

    result = []
    cur, keys  = r.scan(cursor=0, match=pattern, count=2)
    result.extend(keys)
    while cur != 0:
        cur, keys = r.scan(cursor=cur, match=pattern, count=2)
        result.extend(keys)
        
    return result

SCAN कमांड डेटाबेस में कुंजियों की खोज करने के लिए अनुशंसित तरीका है, और KEYS * कमांड पर अनुशंसित है।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow