Форум программистов, компьютерный форум, киберфорум
Java EE (J2EE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
274 / 178 / 30
Регистрация: 16.03.2017
Сообщений: 1,631

Кэширование картинок

11.09.2017, 22:21. Показов 1686. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, посоветуйте поход, плииииз.

Пишу "генератор картинок" на основе URL. ("информеры" - технология похожая на капчу, "счетчики посещений" или "курсов валют")
формат PNG - поэтому не "сохраняя в файл перед раздачей" (похоже) не возможно (очень важен размер и альфа-слой).
Картинки маленькие (0.5-1Кб), но сложные (текст, графика, альфа-слой).
Их много вариантов, но возможен частый повторный запрос в течении 2х-3х дней.

Хочу сохранить последние несколько тысяч файлов на случай повторного запроса (явная экономия процессора).
Но и не миллионы - во первых не нужно так долго хранить, а во вторых папки будут "перегреваться".

Вопрос: как кешировать их?

(я новичок в спринге, поэтому не ругайте за глупые предложения)
Создать синглтон с таблицей ссылка-файл?
как узнать что пора удалять как "устаревшую" и превысившую максимальное количество?
Создать базу? как организовать "цикличность"?
Если без базы, то что делать в случае перезагрузки сервера?
Есть какой-то стандартный механизм/подход/библиотека?
Переложить это на nginx? (тогда теряю контроль над "уровнями доступа" - не критично, но желательно)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.09.2017, 22:21
Ответы с готовыми решениями:

Как запретить кэширование данных броузером?
Как запретить кэширование данных броузером?

Кэширование картинок
Здравствуйте, где можно подробнее узнать об этом: sources += '?'+Math.random(); // добавляем параметр, чтобы без кеша (для теста) ...

Кэширование картинок
Помогите, пожалуйста, включить кэш картинок. Server: nginx/1.8.0 .htaccess: # BEGIN WpFastestCache <IfModule...

7
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
11.09.2017, 23:10
Цитата Сообщение от andyj Посмотреть сообщение
формат PNG - поэтому не "сохраняя в файл перед раздачей" (похоже) не возможно
если вы генерируете на лету, зачем вам куда то сохранять?

Цитата Сообщение от andyj Посмотреть сообщение
как кешировать их?
ehcache вполне подойдет. Есть возможность персистить кеш на диск.
1
274 / 178 / 30
Регистрация: 16.03.2017
Сообщений: 1,631
11.09.2017, 23:59  [ТС]
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
если вы генерируете на лету, зачем вам куда то сохранять?
Во первых (похоже) PNG нельзя отдавать не сохраняя в файл. ImageIO.getImageWritersByFormatName("PNG ") - не поддерживается на уровне ядра (весь инет жалуется). В jpeg - запросто. Кажется и в tiff можно, но не в PNG. А мне нужно маленький размер (для слабых интернет каналов) и альфа-слой (прозрачные зоны). Научился сохранять на диск - ImageIO.write(bi, "PNG", new File("c:\\yourImageName.PNG")) - теоретически могу сразу отдать файл (еще не пробовал).

А во вторых должно сэкономить процессор(слабый хостинг)! сгенерил, сохранил в файлик, файлик отдал. Картинка сложная, а запрашивать ее могут до 20-200 раз за 2 дня. И картинок может быть до тысячи в час.

Цитата Сообщение от KEKCoGEN Посмотреть сообщение
ehcache вполне подойдет. Есть возможность персистить кеш на диск.
Спасибо! почитаю!
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
12.09.2017, 08:26
andyj, вы похоже не совсем понимаете что говорите. Вы отдаете клиенту стрим байтов. Что там внутри у этого стрима клиенту все равно.

Цитата Сообщение от andyj Посмотреть сообщение
должно сэкономить процессор(слабый хостинг)!
каким образом добавление лишних действий экономит процессор? Наоборот вы производите больше действий.
0
274 / 178 / 30
Регистрация: 16.03.2017
Сообщений: 1,631
12.09.2017, 15:56  [ТС]
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
каким образом добавление лишних действий экономит процессор? Наоборот вы производите больше действий.
первый запрос:
1)Нарисовать на канвасе с учетом прозрачности картинку (до сотни элементов - квадраты, текстовые записи, сложные фигуры из линий и полигонов)
2) сохранить картинку на диск
3) (кэширование) запомнить где-то в памяти куда положил
4) отдать файл
5) (кэширование) удалить старые файлы или если кэш уже больше 10-100тыс. картинок

повтор:
1) (кэширование) найти куда положил
2) отдать файл

экономия на лицо... особенно на сотне повторных запросов одной картинки
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
12.09.2017, 20:39
andyj, надо делать так

1. Приходит запрос. Смотрим есть ли в кеше что-нибудь по этому запросу (предположим что нет)
2. Генерация картинки
3. Создание кеша для этого запроса и этой картинки
4. Отдача стрима или байтов картинки клиенту

Все....никаких файлов и прочей мути которую вы написали.

Если деньги есть, можно подключить CDN и вообще не о чем не париться...
0
274 / 178 / 30
Регистрация: 16.03.2017
Сообщений: 1,631
12.09.2017, 20:45  [ТС]
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
Отдача стрима или байтов картинки клиенту
я не нашел как создать стрим с PNG. похоже есть проблемы на уровне java или spring.
Гуглил ImageIO.getImageWritersByFormatName("PNG ") - что-то по поводу "не поддерживает PNG-кодек"
а это ImageIO.write(bi, "PNG", new File("c:\\yourImageName.PNG")) вполне работает...
p.s. я новичок и мне пока не понятно как манипулировать потоками на таком уровне... но примерно представляю как манипулировать файлами.
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
12.09.2017, 21:02
Цитата Сообщение от andyj Посмотреть сообщение
я новичок и мне пока не понятно как манипулировать потоками на таком уровне
Цитата Сообщение от andyj Посмотреть сообщение
похоже есть проблемы на уровне java или spring
очень смелое заявление для новичка. С вероятностью близкой к 100% проблема в недостатке знаний. Если хотите сделать правильно и хорошо, гуглите и будет вам счастье. У того же ImageIO есть возможность писать в стрим а не в файл...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.09.2017, 21:02
Помогаю со студенческими работами здесь

Кэширование картинок, как сделать, чтобы они грузились только один раз, а то они грузятся заново для каждой страницы?
сделал сайт для одной конторы: http://user.7host.com/parashin/index.htm На каждой странице есть одни и те же картинки: ...

Создание массива картинок, добавление их во фрейм!(с возможностью переключения картинок кнопкой)
Всем привет, как создать массив картинок? Имею в виду как добавить картинки в массив а потом переключать их с помощью кнопки? У меня...

перелистывание картинок (при неограниченном кол-ве картинок), используя пикчербоксы на C#
Здравствуйте. Как перелистывать картинки (при неограниченном кол-ве картинок), используя пикчербоксы на языке C#(желательно пример с кодом)?

Скачивание картинок с сайта и удаление этих же скаченных картинок
Очень интересует вопрос. Я скачиваю n-ое кол-во картинок с сайта в определенную папку, после этого картинки из папки сохраняются в pdf...

Кэширование
Стало скучно и решил старый проект поднять на новый протокол. Это весь крутой чат, в котором присутствуют персонажи, объекты, их питомцы и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru