2013-06-21 2 views
1

Я работаю над веб-приложением PHP, в котором я должен представить уровень кэша над моей базой данных.Создание слоя кэша для изображений

В частности, для хранения изображений в кэш-слое, взятых из db, изображения больших размеров: 4-8 МП. Какой был бы лучший способ сделать это? Какие источники данных я должен использовать?

+0

Что такое «кеш-слой»? –

+0

Я имею в виду добавление кеширования на уровень доступа к данным – Taz

+3

Просто сохраните их в файловой системе изначально. В этом случае вам не нужен слой кэширования – zerkms

ответ

2

Вот предложение по схеме:

Создайте три папки - эскизы, отображать изображения и оригинальные изображения. В них вы будете хранить кешированные версии миниатюр, измененных размеров для веб-дисплея и исходного изображения.

При загрузке изображения присвойте ему уникальное имя в вашей файловой системе и сохраните его там. Сохраните оригинальное имя и уникальное имя в своей базе данных вместе с любой другой соответствующей информацией.

Если у вас есть какое-то браузер изображений, чтобы выбрать один из этих образов ...

Получить данные изображения из базы данных. Используйте это, чтобы найти миниатюры, отобразить версии или оригиналы.

Когда изображение просматривается, найдите существующий миниатюру. Если у вас есть, отправьте его. Если вы этого не сделаете, создайте его, сохраните в папке миниатюр и отправьте.

Если изображение увеличено для отображения в браузере, проверьте версию дисплея и т. Д., Как на миниатюры. Используйте измененную версию для отображения, так как 4-8Mp - это много данных для отправки только для веб-браузера.

Когда изображение выбрано для загрузки, отправьте оригинал.

Вы должны быть осторожны с контролем кеша во всем этом - выход PHP не будет автоматически кэшироваться, поэтому вам нужно добавить заголовки самостоятельно. Выполнение этого правильно может значительно ускорить ваше приложение.

Вы можете играть с этим, чтобы добавить вложенные папки, если это оправдано, регулировать размер вашего кэшированных изменения размера изображения и т.д.

Удачи!

0

Прежде всего, как было предложено всеми, кто хранит изображения в БД, это не очень хорошая идея ... Я думаю, что здесь, используя «Кэширующий слой», вы хотите не запускать запрос в базу данных, если изображение уже присутствует в файловой системе .. if thats the case ...

Сохраните все окончательные изображения, которые вы создали, используя скрипт в каталоге. Затем используйте правило перезаписи, которое служит изображению, если оно присутствует, иначе передайте создание на PHP.

Больше объяснения ..

http://www.sitepoint.com/forums/showthread.php?719010-PHP-image-caching-in-server

0

Прежде всего укажите каталог для вашего кеша, в котором вы живете ... это должно быть доступно для записи веб-сервером.

Затем сопоставьте свои параметры запроса с именем файла в этом каталоге.

$filename = $_GET["id"]."_".$_GET["width"].".jpg"; 

Тогда вы в основном следуете этому образцу.

if (!file_exists($cache_dir.$filename)){ 
    // do your db query get the image and resize it to the width and then 
    // save it to $cache_dir.$filename 
} 

header("Content-Type: image/jpeg"); 
header("Content-Size: ".filesize($cache_dir.$filename)); 
readfile($cache_dir.$filename); 

Вы также можете добавить проверку, чтобы увидеть, если запись кэша истек (время против времени изменения), а также проверьте file_exists.

Чтобы вручную удалить что-либо из кеша, вы можете просто удалить файлы из каталога кеша, и они будут восстановлены, вы можете выполнить это, когда запись базы данных будет обновлена ​​новым файлом, чтобы обновить кеш-память ,

Смежные вопросы