А что если попробовать через разницу ключей?
$start = microtime(true);
$exists = array_fill(2e7, 7e7, true);
$stored = array_fill(3e7, 8e7, true);
shuffle($exists);
shuffle($stored);
echo microtime(true) - $start;
echo PHP_EOL;
$start = microtime(true);;
$diff = array_diff($stored, $exists);
echo microtime(true) - $start;
echo PHP_EOL;
$start = microtime(true);
$diff = array_keys(array_diff_key(array_fill_keys($stored, true), array_fill_keys($exists, true)));
echo microtime(true) - $start;
echo PHP_EOL;
// initialize: 11.500846147537
// array_diff: 4.1464519500732
// array_diff_key: 3.2659499645233
Решение с Redis возможно более правильное
Но вместо Python - PHP мигрируют на Golang