Для приложения списка задач, в котором можно назначать исполнителей и проверяющих заранее продумываю как правильно закешировать данные всех пользователей приложения, так как они будут многократно нужны при запросе списков задач. Когда отображаем список, можно увидеть, кто создал задачу, кто исполнители, кто проверяющий. В списке может быть к примеру 20 задач и к каждой задаче может относится по 3 субъекта. Идею доставать информацию о субъектах из бд (я использую mysql) я откинул сразу, посмотрел на REDIS, но мне нужно многоуровневое хранилище (так как неплохо было бы сохранить для каждого пользователя и проекты, в которых он участвует, его роли в каждом проекте и тд, мб в будущем что-то еще), отдельно необходимо закешировать массив ролей в каждом проекте с их привилегиями. И Вот смотрю я на REDIS и в силу своего поверхностного знакомства с ним мне кажется, что многоуровневые данные хранить и изменять в нем будет затруднительно. Сохранять же и читать данные путем сериализации и парсинга JSON мне почему-то тоже не нравится. В идеале бы подходил вариант "mongo-db in ram" или что-то попроще, но с тем же смыслом.
Пока пробую реализовать просто путем создания кастомного объекта-хранилища. Конечно, если нода падает, то при перезапуске мы снова выбираем всех пользователей из базы и заливаем в объект, при изменении информации какого-то пользователя просто перезаписываем инфу по идентификатору типа cache.users[id] = {...new data...}
В таком подходе каких-то критических минусов не заметил, скорее всего по своей неопытности конечно
По оперативе, при сохранении в переменную 10000 юзеров с тремя полями, одно из которых с вложенностью
{
name: 'hj1505238475597',
avatar: 'avatar21505238475597',
projectRoles: {
'2': [ 4, 6 ]
}
}
съедает дополнительно 15мб озу, 100 000 юзеров - 60мб, но это наверное такая малая цифра из-за како-то оптимизации самой нодой структур своих данных