Redis
 sql >> база данни >  >> NoSQL >> Redis

Redis разлика между два списъка?

Няма вградена команда за това - вашите опции са или да изтеглите двата списъка и да извършите сравнението (за diff) в клиента, или да напишете Lua скрипт, който се изпълнява с EVAL команда, за да я изпълните от страна на сървъра. Ето пример за такъв скрипт:

--[[ 
LDIFF key [key ...]
Returns the elements in the first list key that are also present in all other
keys.
]]--

-- A utility function that converts an array to a table
local function a2t(a)
  local t = {}
  for i, v in ipairs(a) do
    t[v] = true
  end
  return t
end

-- A utility function that converts a table to an array
local function t2a(t)
  local a = {}
  for k, _ in pairs(t) do
    a[#a+1] = k
  end
  return a
end

-- main
local key = table.remove(KEYS,1)
local elems = a2t(redis.call('LRANGE', key, 0, -1))

-- iterate remaining keys
while #KEYS > 0 do
  key = table.remove(KEYS,1)
  local check = a2t(redis.call('LRANGE', key, 0, -1))
  -- check each element in the current key for existence in the first key
  for k, _ in pairs(elems) do
    if check[k] then
      elems[k] = nil
    end
  end
end

-- convert the table to an array and reply
return t2a(elems)

Това се изпълнява с redis-cli изглежда така:

$ redis-cli LPUSH key1 value1 value2 value3
(integer) 3
$ redis-cli LPUSH key2 value1 value3 value4
(integer) 3
$ redis-cli --eval ldiff.lua key1 key2
1) "value2"


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да изтриете всички данни в Redis

  2. защо Redis е еднонишков (задвижван от събития)

  3. Отворете Redis порт за отдалечени връзки

  4. Spring RedisTemplate:Сериализирайте множество моделни класове в JSON. Трябва ли да използвате множество RedisTemplate?

  5. Redis Python - как да изтриете всички ключове според определен модел В python, без итерация на python