रेडिस में चाबियों की संख्या


164

क्या रेडिस में चाबियों की संख्या को प्रिंट करने का एक तरीका है?

मुझे इसके बारे में पता है

keys *

लेकिन यह थोड़ा भारी लगता है। - यह देखते हुए कि रेडिस एक महत्वपूर्ण मूल्य स्टोर है शायद यह ऐसा करने का एकमात्र तरीका है। लेकिन मैं फिर भी कुछ देखना चाहूंगा

count keys *

4
COUNT का पुल अनुरोध है, हालांकि इसे अस्वीकार कर दिया गया है। github.com/antirez/redis/pull/32 एंटीरेज़ ने भी KEYS पर टिप्पणी की
एलेक्स

मुझे आश्चर्य है कि अगर उन्होंने इसका समर्थन नहीं किया, क्योंकि यह O (n) होगा - यह अनुमान लगाता है।
एंडी बूट

जवाबों:


199

आप INFO आदेश जारी कर सकते हैं, जो सर्वर के बारे में जानकारी और आंकड़े लौटाता है। एक उदाहरण आउटपुट के लिए यहां देखें ।

जैसा कि mVChr द्वारा टिप्पणियों में उल्लेख किया गया है, आप info keyspaceरेडिस-क्ली पर सीधे उपयोग कर सकते हैं ।


1
redis-cli INFO Keyspace | grep ^db
हैकाहोलिक

164

DBSIZE कुंजी की संख्या लौटाता है और पार्स करना आसान होता है।

डाउनसाइड: यदि किसी कुंजी की समय सीमा समाप्त हो गई है तो भी उसकी गणना हो सकती है।

http://redis.io/commands/dbsize


3
उस उदाहरण में, KEYS *एक्सपायर्ड कुंजी को दर्शाया गया है। साथ ही रेडिस सक्रिय रूप से कुछ समय-सीमा समाप्त हो सकती है , लेकिन जरूरी नहीं कि यह सभी में हो।
seppo0010

45

चेतावनी: इसे उत्पादन मशीन पर न चलाएं।

लिनक्स बॉक्स पर:

redis-cli KEYS "*" | wc -l

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


3
बेहद आसान है, और आपको कुंजी पर भी फ़िल्टर करने देता है।
निक फारिना

25
यह O (n) ऑपरेशन है, क्या O (1) में ऐसा करने का कोई तरीका है?
ज़ूजी

21
उत्पादन वातावरण में बड़े डेटाबेस पर उपयोग न करें। कुंजी कमान
मंत्रों

4
कोई इसे पढ़ने जा रहा है, किसी दिन इसे बिना सोचे समझे प्रोडक्शन बॉक्स पर कर दें और फिर इसे किनारे पर धकेल दें ... शायद पहले ही हो चुका है।
स्टु थॉम्पसन

2
यह केवल गैर-उत्पादन सर्वर पर उपयोग करने के लिए एक अस्वीकरण होना चाहिए। अन्यथा आपको redis.io/commands/SCAN
whitfin

40

कुंजी की कुल संख्या प्राप्त करने के लिए, कमांड के नीचे उपयोग करें:

127.0.0.1:6379> DBSIZE


14

चूंकि Redis 2.6, lua समर्थित है, आप इस तरह वाइल्डकार्ड कुंजियों की संख्या प्राप्त कर सकते हैं

eval "return #redis.call('keys', 'prefix-*')" 0

eval कमांड देखें


8
KEYSकुंजी (उपसर्ग के साथ या बिना) गिनने के लिए उपयोग करना शिशु को स्नान के पानी से बाहर फेंकने के समान है।
इटमार हैबर

1
लुआ न्यूबी के लिए: #इस कोड में लंबाई ऑपरेटर है
yzorg

4

dbsize() कुंजियों की कुल संख्या देता है।

आप यादृच्छिक पर नमूने कीज़ द्वारा दिए गए पैटर्न से मेल खाने वाली कुंजियों की संख्या का अनुमान लगा सकते हैं, फिर जाँच कर सकते हैं कि उनमें से कौन सा अंश पैटर्न से मेल खाता है।

अजगर में उदाहरण; सभी कुंजियों की गिनती के साथ शुरू prefix_:

import redis
r = redis.StrictRedis(host = 'localhost', port=6379)
iter=1000
print 'Approximately', r.dbsize() * float(sum([r.randomkey().startswith('prefix_') for i in xrange(iter)])) / iter

यहां तक ​​कि iter=100मेरे मामले में एक सभ्य अनुमान देता है, फिर भी तुलना में बहुत तेज है keys prefix_

सुधार हर अनुरोध पर 1000 कुंजी का नमूना देने के लिए है, लेकिन कुल गणना रखें, ताकि दो अनुरोधों के बाद आप 2000 से विभाजित करें, तीन अनुरोधों के बाद आप 3000 से विभाजित करेंगे। इस प्रकार, यदि आपका आवेदन कुल संख्या में रुचि रखता है मिलान कुंजी की अक्सर, तो हर बार यह वास्तविक मूल्य के करीब और करीब हो जाएगा।


1

Redis 2.6 के बाद, INFO कमांड का परिणाम वर्गों द्वारा अलग किया जाता है। "कीस्पेस" खंड में, "कुंजियाँ" और "समाप्त हो चुकी कुंजियाँ" फ़ील्ड हैं, यह बताने के लिए कि कितनी कुंजियाँ हैं।


4
यह सही नहीं है। यह अनुभाग का एक नमूना आउटपुट है: # Keyspace db0: keys = 366, expires = 366 यहाँ, 'कुंजियाँ' कुंजियों की कुल संख्या को इंगित करती है और 'expires' समाप्ति सेट के साथ कुंजियों की संख्या को इंगित करता है। अनिवार्य रूप से इसका मतलब है कि उनके पास एक टीटीएल सेट है और वे समाप्त होने के लिए सेट हैं, न कि वे समाप्त हो गए हैं।
s1d

-1
eval "local count = redis.call('scan', 0, 'match', 'key:*:key', 'count', 10000) if count ~= 0 then return #count[2] end " 0

eval "local count = redis.call('sscan', 'key.key:all', 0, 'match', '*', 'count', 1000000) if count ~= 0 then return #count[2] end " 0
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.