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

कुंजी कैसे प्राप्त करें जो रेडिस में किसी विशेष पैटर्न से मेल नहीं खाती?

महत्वपूर्ण: हमेशा SCAN का उपयोग करें के बजाय (बुराई ) KEYS

रेडिस का पैटर्न मिलान कुछ हद तक कार्यात्मक रूप से सीमित है (stringmatchlen . का कार्यान्वयन देखें) in util.c) और वह प्रदान नहीं करता जो आप एटीएम चाहते हैं। उस ने कहा, निम्नलिखित संभावित मार्गों पर विचार करें:

  1. विस्तार stringmatchlen अपनी आवश्यकताओं से मेल खाने के लिए, संभवतः इसे पीआर के रूप में सबमिट करना।
  2. विचार करें कि आप क्या करने की कोशिश कर रहे हैं - चाबियों का एक सबसेट प्राप्त करना हमेशा अक्षम होता है जब तक कि आप उन्हें अनुक्रमित नहीं करते हैं, इसके बजाय सभी गैर-उपयोगकर्ता कुंजियों (जैसे रेडिस सेट में) के नामों को ट्रैक करने पर विचार करें।
  3. यदि आप वास्तव में पूरे कीस्पेस को स्कैन करने और नकारात्मक पैटर्न से मेल खाने पर जोर दे रहे हैं, तो इसे पूरा करने का एक तरीका थोड़ा सा लुआ जादू है।

निम्नलिखित डेटासेट और स्क्रिप्ट पर विचार करें:

127.0.0.1:6379> dbsize
(integer) 0
127.0.0.1:6379> set user:1 1
OK
127.0.0.1:6379> set use:the:force luke
OK
127.0.0.1:6379> set non:user a
OK

लुआ (इसे scanregex.lua के रूप में सेव करें) ):

local re = ARGV[1]
local nt = ARGV[2]

local cur = 0
local rep = {}
local tmp

if not re then
  re = ".*"
end

repeat
  tmp = redis.call("SCAN", cur, "MATCH", "*")
  cur = tonumber(tmp[1])
  if tmp[2] then
    for k, v in pairs(tmp[2]) do
      local fi = v:find(re) 
      if (fi and not nt) or (not fi and nt) then
        rep[#rep+1] = v
      end
    end
  end
until cur == 0
return rep

आउटपुट - पहली बार नियमित मिलान, दूसरी बार पूरक:

[email protected]:~$ redis-cli --eval scanregex.lua , "^user"
1) "user:1"
[email protected]:~$ redis-cli --eval scanregex.lua , "^user" 1
1) "use:the:force"
2) "non:user"


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. नोड रेडिस, चर ग्राहकों के बीच साझा किए जाते हैं?

  2. स्प्रिंग-डेटा-रेडिस रेडिस टेम्पलेट अपवाद

  3. रेडिस में हैश से एक विशिष्ट पैटर्न से मेल खाने वाली सभी कुंजी कैसे प्राप्त करें?

  4. जब कई अनुरोध एक साथ होते हैं तो Redis अपडेट नहीं होता है

  5. रेल और कैशिंग, क्या memcache और redis के बीच स्विच करना आसान है?