Redis
 sql >> Baza danych >  >> NoSQL >> Redis

jak zdobyć klucze, które nie pasują do konkretnego wzoru w redis?

WAŻNE: zawsze używaj SCAN zamiast (zła ) KEYS

Dopasowywanie wzorców Redis jest nieco ograniczone funkcjonalnie (zobacz implementację stringmatchlen w util.c) i nie udostępnia tego, czego szukasz w bankomacie. To powiedziawszy, rozważ następujące możliwe trasy:

  1. Rozszerz stringmatchlen aby spełnić Twoje wymagania, ewentualnie przesyłając go jako PR.
  2. Zastanów się, co próbujesz zrobić — pobieranie podzbioru kluczy zawsze będzie nieefektywne, chyba że je zindeksujesz, rozważ zamiast tego śledzenie nazw wszystkich kluczy niebędących użytkownikami (np. w zestawie Redis).
  3. Jeśli naprawdę nalegasz na skanowanie całej przestrzeni klawiszy i dopasowywanie negatywnych wzorców, jednym ze sposobów na osiągnięcie tego jest odrobina magii Lua.

Rozważ następujący zbiór danych i skrypt:

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

Lua (zapisz to jako 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

Dane wyjściowe - pierwszy raz zwykłe dopasowanie, drugi raz uzupełnienie:

[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. Praca z klawiszami w redis

  2. redis:tworzenie kopii zapasowej dump.rdb

  3. Nie można powiązać odbiornika TCP *:6379 przy użyciu Redis w systemie Windows

  4. Jak zapisać i pobrać ciąg z akcentami w redis?

  5. Listy Redis