Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

Intersecção de dois ou mais conjuntos ordenados


Você deve primeiro verificar qual ZSET tem menos elementos com ZCARD, e clona e corta o mais curto.

Em segundo lugar, você está deixando 2 sobras. Você pode reutilizar o mesmo auxiliar ZSET para ter uma limpeza mais rápida.

Eu também queria sugerir DUMP e RESTORE para o clone, mas para o caso de conjuntos classificados ZUNIONSTORE é realmente muito mais rápido. Aqui está um tempo de ambos para um conjunto de elementos de 1M:
1) 1) (integer) 14
   2) (integer) 1444165498
   3) (integer) 936762
   4) Complexity info: N:1000000,M:1000000
   5) 1) "ZUNIONSTORE"
      2) "temp3"
      3) "1"
      4) "temp1"
      5) "WEIGHTS"
      6) "1"
2) 1) (integer) 13
   2) (integer) 1444165421
   3) (integer) 3166360
   4)
   5) 1) "evalsha"
      2) "48286113cfe4b389d516e98646e5f4e086decc34"
      3) "2"
      4) "temp1"
      5) "temp2"
      6) "0"