Как и где лучше хранить данные пользователя?
Если мы про высокие нагрузги: Мемкеш теряет данные при перезапуске. Тут либо хранить в мемкеше и приперезапуске системы\мемкеша заполнять их снова, либо хранить в redis (Я бы сделал так).
А вообще - где угодно можно, можно хоть в той же теблице юзера в MySQL - главное чтоб производительности хватало.
Зависит от масштабов. Можно сделать в БД таблицу с заявками в друзья. Удалять из нее заявки которые приняты либо отклонены. В принципе при условии индексов, должно работать быстро.