sql >> Database >  >> NoSQL >> Redis

Redis SCAN-overeenkomst

Redis-scanovereenkomst ondersteunt alleen glob-stijlovereenkomst. Het kan geen regex-matching uitvoeren. Om je doel te bereiken, heb je twee opties:

  1. Scan alle sleutels en doe overeenkomsten aan de kant van de klant.
  2. Gebruik het Lua-script om te scannen en te matchen. U kunt de volgende oneliner als voorbeeld proberen:
redis-cli eval 'local res = redis.call("scan", ARGV[1]); local matches = {}; for i,v in ipairs(res[2]) do if v == string.match(v, ARGV[2]) then matches[#matches+1] = v end end res[2] = matches; return res' 0 cursor-starting-from-0 'Person:[^:]*'

Deze one-liner geeft resultaten precies zoals de ingebouwde scanopdracht. Ik ben geen Lua-expert en de code is niet volledig getest.

Lua's matching is ook GEEN regex-matching, hoewel het de meeste problemen kan oplossen. U moet de referentie van Lua gebruiken om te controleren of deze overeenkomt met uw zaak.




  1. Hoe verbinding maken met een Docker Redis-clusterinstantie met behulp van jedis voor Java?

  2. Python &Redis:best practices voor Manager/Worker-applicaties

  3. PostgreSQL en MongoDB mixen (als Django-backends)

  4. Gedeeltelijke indexen in mongodb / mangoest