2013-05-22 12 views
6

मैं रेडिस पर हैंश का उपयोग करके ऑब्जेक्ट्स स्टोर करता हूं और मैं रेडिस बिंदु से इन हैश की लंबाई की गणना करना चाहता हूं।रेडिस हैश की लंबाई कैसे प्राप्त करें?

आप STRLEN का उपयोग करके तारों के लिए आसानी से ऐसा कर सकते हैं।

लेकिन मुझे बस documentation में हैश डेटा प्रकार के लिए उपयुक्त कमांड नहीं मिल रहा है। यह सूचियों या सेटों के लिए एक ही बात प्रतीत होता है।

असल में, मुझे मिला एकमात्र समाधान HGETALL के साथ पूरे हैश प्राप्त करना और ग्राहक आकार की लंबाई की गणना करना है।

क्या बॉक्स से पूरी तरह से कुछ बाहर है?

यदि मैं गलत हूं, तो कृपया मुझे यह बताने में संकोच न करें कि मुझे प्रासंगिक लिंक/पोस्ट/SO प्रश्न क्यों दें।

संपादित:

HLEN एक समाधान है क्योंकि यह "हैश में निहित क्षेत्रों की संख्या देता है" नहीं है। मैं क्षमता योजना & Redis डेटाबेस पर सक्रिय निगरानी के लिए इस आकार की गणना करना चाहता हूं।

+0

क्या आप समझा सकते हैं कि आप यह क्यों चाहते हैं?क्या यह रेडिस पर स्मृति उपयोग का आकलन करने के लिए है? या क्या आपको एक विशेष सुविधा को लागू करने की आवश्यकता है? 'रेडिस' बिंदु से हैश की लंबाई को खोजने के तरीके हैं, लेकिन यह आपके उपयोग के मामले के आधार पर उपयोगी हो सकता है या नहीं भी हो सकता है। –

उत्तर

7

डिस्क स्थान की लंबाई के लिए आप DEBUG OBJECT का उपयोग कर सकते हैं क्योंकि यह प्रत्येक कुंजी के लिए कई सूचना आइटम लौटाता है।

redis 127.0.0.1:50001> hset myhash field1 'hello' 
(integer) 1 
redis 127.0.0.1:50001> hset myhash field2 'world' 
(integer) 1 
redis 127.0.0.1:50001> DEBUG OBJECT myhash 
Value at:0x7fb8de4ad590 refcount:1 encoding:zipmap serializedlength:31 lru:696871 lru_seconds_idle:0 

आशा है कि यह मदद करता है

+1

तो उस वस्तु को कितने बाइट्स लेते हैं? मैं 'serialized लंबाई '31 समझ में नहीं आता? –

4

हैश की लंबाई के साथ आप क्या करना चाहते हैं इस पर निर्भर करता है।

यदि आप कुछ डायग्नोस्टिक्स या निगरानी करने की लंबाई चाहते हैं, जैसे स्मृति की खपत ढूंढना, तो मैं सुझाव दूंगा कि आप इसे redis-rdb-tools जैसे टूल का उपयोग करके ऑफ़लाइन करें। सीएसवी डंप फ़ाइल आपको प्रत्येक कुंजी के बारे में आंकड़े मिल जाएगी - जिसमें कुल आकार, कुल स्मृति खपत और अन्य शामिल हैं।

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

+0

डाउनवॉटर - क्या आप कृपया एक टिप्पणी छोड़ सकते हैं क्यों इसे डाउनवॉटेड किया गया था? मुझे डाउनवोट पर कोई फर्क नहीं पड़ता है, लेकिन मुझे यह जानना अच्छा लगेगा कि मैंने क्या याद किया या गलत तरीके से कहा :) –

+0

मैंने आपको नीचे नहीं छोड़ा लेकिन आपके महान टूल redis-rdb-tools के लिए अपवित्र किया। – Cybermaxs

+0

@ श्रीपति कृष्णन I downvoted क्योंकि "रेडिस हैश लम्बाई कैसे प्राप्त करें" का स्पष्ट उत्तर एचएलईएन है, लेकिन स्पष्ट रूप से ओपी का मतलब हैश के "लंबाई" के अलावा उसके प्रश्न में कुछ और है, इसलिए आपका जवाब वास्तव में अच्छा है। मैं डाउनवोट को हटा दूंगा, लेकिन जब तक आप अपना जवाब किसी भी तरह संपादित नहीं करेंगे तब तक मुझे अब और नहीं जाने देंगे। यदि आप करते हैं, तो मुझे इसे हटाने में खुशी होगी :)। – Eli

23

बस HLEN का उपयोग करें।

redis> HSET myhash field1 "Hello" 
(integer) 1 
redis> HSET myhash field2 "World" 
(integer) 1 
redis> HLEN myhash 
(integer) 2 

संपादित करें: सवाल है कि ओपी सक्रिय निगरानी के लिए एक हैश की डिस्क पर आकार चाहता है स्पष्ट किया गया था। उस स्थिति में, मैं निश्चित रूप से एक लुआ स्क्रिप्ट के साथ जाऊंगा जो आपके सर्वर पर हैश के आकार की गणना करता है और आपको वापस मूल्य देता है। यदि आप बड़े हैंश की अपेक्षा कर रहे हैं तो HGETALL का उपयोग करें, क्योंकि आपको अपने सर्वर से उस पूरे हैश को अपने क्लाइंट कंप्यूटर पर स्थानांतरित करने की आवश्यकता होगी, और यह वास्तव में आपकी बाधा बनने जा रहा है। लूआ के साथ रेडिस सर्वर पर बस यह गणना करने का मतलब है कि आप अपने पूरे हैश के डेटा के संभवतः एमबी के बजाय अपने नेटवर्क के बाइट्स की संख्या का एक अंतर स्थानांतरित कर सकते हैं।

+0

जैसा कि मैंने पहले कहा था, एचएलईएन केवल हैश – Cybermaxs

+2

@ साइबरमैक्स-बेटक्लिक के लिए फ़ील्ड की संख्या लौटाता है, आपने कभी भी अपनी पोस्ट में एचएलईएन का उल्लेख नहीं किया है। और हैश की लंबाई फ़ील्ड (कुंजी) की संख्या है। यदि आप ऐसा नहीं कर रहे हैं तो आप किस लंबाई का जिक्र कर रहे हैं? किसी भी अन्य भाषा में, जब आप लेन (हैश) की तरह कुछ करते हैं, तो आप यही लौटने की उम्मीद करते हैं। – Eli

+0

ओह यह सच है। एचएलईएन "कुंजी पर संग्रहीत हैश में निहित फ़ील्ड की संख्या देता है"; लंबाई नहीं है या यदि आप पूरे हैश का आकार पसंद करते हैं। – Cybermaxs

0

लगता है आपका सर्वश्रेष्ठ दांव HSCAN उपयोग करने के लिए जब आप एक हैश के पार चलो क्षेत्रों मिलता है और उनमें से प्रत्येक के लिए HSTRLEN योग होगा।

संबंधित मुद्दे