Redis имеет механизм уведомлений об операциях. См.
notifications.
Что касается таймера на php, можете определить себе допустимую ошибку, напр. в 20ms и спать не секунду, а микросекунды, используя ф-ю
usleep(2E4), и проснувшись, проверять системное время с точностью до микросекунд, опять же – через
microtime(TRUE). Если до очередной секунды осталось меньше погрешности – выполнить код. И снова спать, часто просыпаясь : )
Disclaimer. Этот метод никак не гарантирует, что не проспите очередную секунду – если, например, система сильна загружена.