У меня есть веб-приложение, где я хотел бы вытянуть пользовательские настройки от базы данных и сохранить их для Глобального доступа. Имело бы больше смысла хранить данные в Singleton или объект Сессии? Каково различие между двумя?
Лучше хранить данные как ссылку на объект или разбить его в текстовые объекты значения (ints и строки)?
Сессия. Вот для чего это нужно. Сеанс хранится в глобальном кеше (в основном синглтон) с ключом по идентификатору сеанса. Таким образом, вы получите только данные для интересующего сеанса. Использование синглтона в основном будет реплицировать глобальный кеш, и вам придется заново изобретать механизм для независимого извлечения данных для каждого сеанса.
Продолжайте и сохраните объект. Пусть сеанс позаботится о сериализации его во что-то, что можно восстановить. Однако будьте осторожны с тем, что вы вкладываете в сессию. Вы не хотите хранить там слишком много данных, иначе вы будете использовать много памяти (при условии наличия кеша в памяти).
Если эти настройки будут использоваться для всех пользователей сайта, поместите их в синглтон или в кэш приложения. Если они специфичны для каждого пользователя, поместите их в сессию.
Используйте объектные ссылки при добавлении в кэш приложения или сессии - я полагаю, что типы значений будут помещены в коробку, чтобы они выглядели как объекты в кэше. Если вы используете синглтон, это может произойти в любом случае.
Объект сессии, определенно.
Синглтоны существуют на уровне процесса. Это означает, что если в любой момент времени на ваш сайт заходят 20 пользователей, они используют один и тот же объект синглтона. К этой концепции трудно привыкнуть, если вы не часто занимаетесь веб-разработкой.
Сессии существуют на уровне пользователя. Это означает, что вы можете хранить данные для каждого пользователя, а не для каждого процесса.