SQLite.
Почему?
Можно держать всю БД хоть на диске в одном файле, хоть в памяти (in-memory).
Вместо своего велосипеда написать SQL запрос или составить его с query builder/ORM и получить ответ.
Для скорости - выставить нужные индексы на таблицу.
CSV - несколько хардкорное решение, несмотря на советы от некоторых. Если понадобится изменить какие-то данные/структуру в будущем, то придется сменять файл целиком. А так достаточно может изменить таблицу одним запросом.
В отличие от Redis, можно держать данные также и на диске, при необходимости.