Redis: поиск SCARD результата SINTER без сохранения промежуточного набора
Мне нужна длина (SCARD) пересечения 2 больших наборов в Redis.
Так что это добивается того, чего я хочу:
> SINTERSTORE intermediate s:1 s:2
> SCARD intermediate
Однако наборы велики, поэтому я не хочу хранить промежуточное значение. Концептуально хочу:
> SCARD (SINTER s:1 s:2)
Есть ли способ добиться этого в одной команде, возможно, с помощью сценариев Lua? Или лучше всего написать сценарий на языке приложения и удалить промежуточное значение, когда я закончу? например, используя python и redis-py:
>>> r = redis.Redis(...)
>>> pipe = r.pipeline()
>>> res = pipe.sinterstore('intermediate', 's:1', 's:2').scard('intermediate').delete('intermediate').execute()
>>> print res[1]
1 ответ
Решение
Redis не выполняет вложенные команды, поэтому концептуальная версия, хотя и полезна для описания необходимости, не поддерживается.
Я предлагаю использовать метод промежуточных значений, но вместо конвейеризации используйте транзакцию (MULTI/EXEC) для переноса операций пересечения, количества элементов и удаления.