sql >> Database teknologi >  >> NoSQL >> Redis

Er der forskel på to lister?

Der er ingen indbygget kommando til det - dine muligheder er enten at trække de to lister og udføre sammenligningen (for diff) i klienten, eller skrive et Lua script, der køres med EVAL kommando for at udføre det på serversiden. Her er et eksempel på sådan et script:

--[[ LDIFF-tast [nøgle ...]Returnerer elementerne i den første listenøgle, som også findes i alle andre nøgler.]]---- En hjælpefunktion, der konverterer en matrix til en tabellokal. funktion a2t(a) local t ={} for i, v i ipairs(a) do t[v] =true end return tend-- En hjælpefunktion, der konverterer en tabel til en arraylocal funktion t2a(t) local a ={ } for k, _ i par(t) gør a[#a+1] =k ende retur aend-- mainlocal key =table.remove(KEYS,1)local elems =a2t(redis.call('LRANGE', key , 0, -1))-- gentag resterende nøgler, mens #KEYS> 0 do key =table.remove(KEYS,1) local check =a2t(redis.call('LRANGE', key, 0, -1)) -- tjek hvert element i den aktuelle nøgle for eksistens i den første nøgle for k, _ i par(elems) gør hvis check[k] så elems[k] =nul ende endend-- konverter tabellen til et array og replyreturn t2a(elems )

Kører dette med redis-cli ser sådan ud:

$ redis-cli LPUSH nøgle1 værdi1 værdi2 værdi3(heltal) 3$ redis-cli LPUSH nøgle2 værdi1 værdi3 værdi4(heltal) 3$ redis-cli --eval ldiff.lua nøgle1 nøgle21) "værdi2" 


  1. Mongoid Group By eller MongoDb gruppe af i skinner

  2. Redis replikering og redis sharding (cluster) forskel

  3. mongoexport uden _id felt

  4. MongoDB remove()