जवाबों:
KEYSकमांड देखने की कोशिश करें । KEYS *रेडिस में संग्रहीत सभी कुंजियों को सूचीबद्ध करेगा।
संपादित करें: कृपया KEYSप्रलेखन पृष्ठ के शीर्ष पर चेतावनी पर ध्यान दें :
समय की जटिलता: O (N) डेटाबेस में कुंजी की संख्या होने के साथ N, इस धारणा के तहत कि डेटाबेस में दिए गए प्रमुख नाम और दिए गए पैटर्न की लंबाई सीमित है।
अद्यतन (V2.8 या अधिक): इस अर्थ में SCANएक बेहतर विकल्प KEYSहै कि यह सर्वर को ब्लॉक नहीं करता है और न ही महत्वपूर्ण संसाधनों का उपभोग करता है। इसका उपयोग करना पसंद करें।
KEYSएक बड़े डेटा सेट को क्वेरी करते समय सर्वर को लंबे समय तक अवरुद्ध करने की क्षमता है
रेडिस 2.8 और इसके बाद के संस्करण के लिए अद्यतन
जैसा कि इस प्रश्न के पिछले उत्तरों की टिप्पणियों में उल्लेख किया गया है, KEYSएक संभावित खतरनाक कमांड है क्योंकि आपका रेडिस सर्वर इसे संचालित करते समय अन्य संचालन करने के लिए उपलब्ध नहीं होगा। इसके साथ एक और जोखिम KEYSयह है कि यह प्रतिक्रिया बफर तैयार करने के लिए बहुत सारे रैम (आपके कीस्पेस के आकार पर निर्भर) का उपभोग कर सकता है, इस प्रकार संभवतः आपके सर्वर की मेमोरी को समाप्त कर सकता है।
रेडिस के संस्करण 2.8 ने SCAN की शुरुआत की थी परिवार को आदेशों का जो बहुत अधिक विनम्र हैं और उसी उद्देश्य के लिए इसका उपयोग किया जा सकता है।
सीएलआई भी इसके साथ काम करने का एक अच्छा तरीका प्रदान करता है:
$ redis-cli --scan --pattern '*'
ऐसा हो सकता है कि रेडिस-क्ली का उपयोग करते हुए, आप अपने दूरस्थ रेडिस-सर्वर से कनेक्ट होते हैं, और फिर कमांड:
KEYS *
यह कुछ भी या बेहतर नहीं दिखा रहा है, यह दिखाता है:
(empty list or set)
यदि आप पूरी तरह से सुनिश्चित हैं कि आपके द्वारा उपयोग किया जाने वाला रेडिस सर्वर वह है जिसके पास आपके पास डेटा है, तो हो सकता है कि आपका Redis-cli Redis सही डेटाबेस आवृत्ति से कनेक्ट नहीं हो रहा हो।
जैसा कि रेडिस डॉक्स में वर्णित है, नए कनेक्शन डीबी 0 के लिए डिफ़ॉल्ट के रूप में कनेक्ट होते हैं ।
मेरे मामले में KEYSकमांड परिणाम प्राप्त नहीं कर रहा था क्योंकि मेरा डेटाबेस था 1. डेब का चयन करने के लिए आप चाहते हैं, SELECT का उपयोग करें ।
Db की पहचान एक पूर्णांक द्वारा की जाती है।
SELECT 1
KEYS *
मैं यह जानकारी पोस्ट करता हूं क्योंकि पिछले उत्तरों में से कोई भी मेरा मुद्दा हल नहीं कर रहा था।
-> रेडिस-क्लि से सभी कुंजी प्राप्त करें
-redis 127.0.0.1:6379> keys *
-> पैटर्न की सूची प्राप्त करें
-redis 127.0.0.1:6379> keys d??
यह तीन वर्णों के साथ 'd' से शुरू होने वाली कुंजियों का उत्पादन करेगा।
-redis 127.0.0.1:6379> keys *t*
इस wil को कुंजी में मैचों के 't' अक्षर के साथ चाबी मिलती है
-> कमांड लाइन से कुंजी को गिनें
-redis-cli keys * |wc -l
-> या आप उपयोग कर सकते हैं dbsize
-redis-cli dbsize
key *t*करें keys *t*।
Redis Cheat Sheet पर एक नज़र डालें । Redis-cli के साथ रेडिस कुंजी का एक सबसेट प्राप्त करने के लिए मैं कमांड का उपयोग करता हूं
KEYS "prefix:*"
हां, आप इसका उपयोग करके सभी कुंजी प्राप्त कर सकते हैं
var redis = require('redis');
redisClient = redis.createClient(redis.port, redis.host);
redisClient.keys('*example*', function (err, keys) {
})
SCAN को क्लाइंट को सभी कुंजियों को मेमोरी में लोड करने की आवश्यकता नहीं होती है जैसे कि KEYS करता है। SCAN आपको एक पुनरावृत्त देता है जिसका आप उपयोग कर सकते हैं। मेरे रेडिस में 1 बी रिकॉर्ड था और मुझे एक बार में सभी कुंजी वापस करने के लिए पर्याप्त मेमोरी नहीं मिल सकी।
यहाँ एक पैटर्न से मेल खाते स्टोर से सभी कुंजी प्राप्त करने और उन्हें हटाने के लिए एक अजगर स्निपेट है:
import redis
r = redis.StrictRedis(host='localhost', port=6379, db=0)
for key in r.scan_iter("key_pattern*"):
print key
कुंजी पैटर्न
1.0.0 के बाद से उपलब्ध है।
समय की जटिलता: O (N) डेटाबेस में कुंजी की संख्या होने के साथ N, इस धारणा के तहत कि डेटाबेस में दिए गए प्रमुख नाम और दिए गए पैटर्न की लंबाई सीमित है।
सभी कुंजी मिलान पैटर्न लौटाता है।
चेतावनी: इस आदेश का उपयोग करने की अनुशंसा नहीं की जाती है क्योंकि यह प्रदर्शन को बर्बाद कर सकता है जब इसे कुंजी के बजाय बड़े डेटाबेस के विरुद्ध निष्पादित किया जाता है तो आप SCAN या SETS का उपयोग कर सकते हैं ।
उपयोग करने के लिए KEYS कमांड का उदाहरण:
redis> MSET firstname Jack lastname Stuntman age 35
"OK"
redis> KEYS *name*
1) "lastname"
2) "firstname"
redis> KEYS a??
1) "age"
redis> KEYS *
1) "lastname"
2) "age"
3) "firstname"
यदि आपकी रेडिस एक क्लस्टर है, तो आप इस स्क्रिप्ट का उपयोग कर सकते हैं
#!/usr/bin/env bash
redis_list=("172.23.3.19:7001,172.23.3.19:7002,172.23.3.19:7003,172.23.3.19:7004,172.23.3.19:7005,172.23.3.19:7006")
arr=($(echo "$redis_list" | tr ',' '\n'))
for info in ${arr[@]}; do
echo "start :${info}"
redis_info=($(echo "$info" | tr ':' '\n'))
ip=${redis_info[0]}
port=${redis_info[1]}
echo "ip="${ip}",port="${port}
redis-cli -c -h $ip -p $port set laker$port '湖人总冠军'
redis-cli -c -h $ip -p $port keys \*
done
echo "end"
हमें रेडिस 2.8 के साथ और बाद में --scan --pattern का उपयोग करना चाहिए।
आप इस रैपर को रेडिस-क्ली के ऊपर इस्तेमाल करके देख सकते हैं। https://github.com/VijayantSoni/redis-helper
आप बस redis-cli का उपयोग करके अपने रेडिस सर्वर से कनेक्ट कर सकते हैं, अपने डेटाबेस का चयन करें और कुंजी टाइप करें *, कृपया याद रखें कि यह आपको चयनित रेडिस डेटाबेस में मौजूद सभी कुंजी देगा।
redis-cli keys "*"