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) для переноса операций пересечения, количества элементов и удаления.

Другие вопросы по тегам