Можно реализовать примерно так
1) создать для задачи колонку isRead(0/1 не прочитано/прочитано)
2) при создании записи добавлять в кеш с привязкой к пользователю, что у него есть непрочитанная задача
Yii::$app->cache->set('newTask-user-'. $userId, 1);
конечно нужно сначала проверять счетчик на существование и инкриментировать его. Например, это умеет редис
https://yiigist.com/package/drsdre/yii2-redis-coun...
В общем, если счетчика нет, то он создается, если есть, то берется его старое значение и делается +1
3) Когда пользователь зашел в список задач, то идет обращение не в БД, а к этому счетчику и пользователь видит (+1, +2 и т.д).
Когда заходит в конкретную задачу, то если колонка isRead = 0, то записываем 1, а счетчик делаем -1.
4) Наверное, еще придется предусмотреть "разогрев кеша", если он упал(на случай если вы предполагаете, что нагрузка будет реально большая)
Для этого пишем задачу, которая запускается при запуске сервера кеширования, в которой берем count всех непрочитанных задач, сгруппированных по пользователям и записываем эти значения в счетчики.