Войти
Android, Windows, Apple, Ликбез. Социальные сети. Драйверы
  • Японские телефоны Новый японский смартфон
  • Lenovo G500S: характеристики, основные особенности
  • Определяем серию продукта видеокарт Nvidia Характеристики карты nvidia 9800 gt
  • А конкуренты у смартфона есть
  • Что такое расширение файла TRZ?
  • Не работает динамик в "айфоне"
  • Что такое время кэширования посылки. Что значит кэшированные данные в телефоне

    Что такое время кэширования посылки. Что значит кэшированные данные в телефоне

    В данной статье мы поговорим о таком важном и злободневном вопросе, как что такое кэш, какие его виды выделяют и можно ли удалить кэшированные данные. Подобные вопросы часто задают пользователи компьютеров, планшетов, смартфонов и прочей современной цифровой техники. Вопросы начинают возникать, когда пользователи не до конца разбираются в этом понятии. Выделяют несколько различающихся видов кэш-памяти на различных устройствах. Она представляет собой неотъемлемую часть техники для надежной и бесперебойной работы.

    Что такое кэш-память

    Термином «кэш» называют участок памяти компьютера или мобильного устройства, забранный с жесткого диска, где содержится информация, особенно часто требуемая процессору. Он позволяет облегчить работу процессора тогда, когда ему следует продолжительно загружать или искать информацию. Иначе говоря, это информация, которая сохраняется довольно близко к самому процессору. Устройство помещает в хранилище команды или информацию, которые применяются наиболее часто, и это дает возможность устройству находить быстрее запрашиваемый материал.

    Обычно устройство помещает в данный район памяти обработанные данные, чтобы не подвергать обработке её заново и не расходовать лишнее время.

    История появления термина

    В первый раз слово «cache» (кэш) в компьютерном контексте было употреблено в 67 году прошлого века во время подготовки к выходу статьи для размещения в одном из передовых специализированных журналов «IBM Systems Journal». Публикация касалась модернизации памяти в разрабатываемой в то время компьютерной модели. Главный редактор издания Лайл Джонсон дал задание сочинить более изобразительный термин, вместо существовавшего в то время термина «высокоскоростной буфер», однако, за неимением идей сам внес предложение назвать ее словом «cache».

    Публикация увидела свет в первой половине 68 года прошедшего века, ее авторы получили премию от IBM, творение возымело распространение и в дальнейшем было доработано, а термин «кэш» довольно скоро стал употребляться в компьютерной литературе как общепризнанный.

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

    Функционирование

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

    Специальные клиенты обращаются к информации внутри устройства:

    • операционная система;
    • веб-браузер;

    Прежде всего, они обращаются именно к резервным копиям (кэш). Если там найдена запись с соответствующим идентификатором, который совпадает с личным номером запрошенного компонента данных, то употребляются элементы сведений из резерва. Тогда можно говорить о «попадании кэшa». Если в резерве соответствующая запись не обнаружена, то данные считываются из основной памяти и опять-таки копируется в тот самый резерв с присвоением идентификатора. Теперь они становятся доступными для дальнейших обращений клиентам.

    Подобные случаи называют «промашкой кэшa». Процент обращений к резервным копиям, когда в них бывают найдены результаты, получил название «уровень (или коэффициент) попаданий».

    Кэш компьютера

    Стационарный компьютер содержит оперативную память, которую он употребляет для оптимизации своей работы. Кэш-память в компьютере представляет собой буфер между оперативной памятью и процессором. Она размещена неподалеку от самого процессора, по этой причине ему становится проще использовать информацию, которая заложена в ней.

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

    К примеру, человеку необходимо узнать номер телефона, который он не в силах вспомнить. Разыскать телефон в справочнике будет равнозначно тому, как процессор отыскивает сведения в оперативной памяти. Если этот номер телефона будет записан на отдельном листочке, человек сможет достаточно скоро узнать его без поиска в справочнике. Вот такой листок представляет собой пример кэш-памяти. Компьютер механически загружает туда сведения, которые часто могут быть полезны. Это, разумеется, значительно оптимизирует работоспособность компьютера, повышает его производительность.

    Кэш интернет-браузера

    Интернет-браузер равным образом применяет память кэшa. Он загружает туда сведения, изображения, аудиозаписи и многое другое. Это можно обнаружить по тому, что браузер бойче загружает веб-сайт, на который пользователь зачастую заходит, нежели тот, на какой попал впервые. Это происходит по причине того, что браузер «соображает». Чтобы постоянно не загружать данные с него и не расходовать на это время, он держит ее в кэш-память для оптимизации работоспособности и экономии времени. Для этого кратковременного пространства браузер занимает место на жестком диске.

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

    Кэш для игр на Андроид

    Владельцы смартфонов, работающих под операционной системой Андроид, нередко бывают озадачены вопросом, можно ли очистить кэшированные данные в телефоне.

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

    Игра с кэшем обычно ставится таким образом:

    1. Установочный файл размещается в любом месте на устройстве.
    2. Кэш, опять же, должен быть помещен в дополнительно отведенное пространство на смартфоне, чтобы во время старта игры он стал считывать сведения с необходимого места.
    3. Если кэш находится там, где следует, игра будет благополучно функционировать.
    4. Пространство, куда нужно его записывать, показано, как правило, в описании приложения.

    Что значит очистить кэш

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

    Иногда владельцы смартфонов Самсунг при попытке освободить место в устройстве встречаются с пугающим системным предупреждением «кэшированные данные приложений будут очищены». Что это означает?

    Пользователю необходимо понимать, что значит «очистить кэш», и иметь понятие к каким последствиям это может привести. Разумеется, временами бывают ситуации, когда чистить память необходимо. Это может быть обусловлено переполнением памяти или же неполадками, к которым оно способно привести. Также бывает, что кэш, вопреки своему основному назначению, может препятствовать работе компьютера. За этим требуется следить. В этом помогут различные программы, утилиты и приложения.

    К примеру, программа CCleaner для стационарного компьютера (или ее аналог для Андроида в виде приложения) способна разыскать в системе устройства тот кэш, в каком пользователь не имеет необходимости, и удалить его самостоятельно. Описываемая программа значительно способствует оптимизации работоспособности устройства. Она может диагностировать ваш компьютер на предмет ошибок, почистить реестр системы, а также поставить автозагрузку программ при старте компьютера или устройства. Это тоже немаловажная функция, поскольку зачастую компьютерные приложения, которые мы загружаем из интернета, автоматом подгружаются при пуске операционной системы.

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

    Для чего необходимо очищение

    Одно из соображений, по каким причинам эту память надо очищать, - это высвобождение свободного места на системном диске. В особенности это имеет отношение для тех, кто использует несколько браузеров. Все они для использования собственного кэшa будут запасать для себя место с системного диска. В итоге это может значительно отразиться на памяти. Равным образом кэш хранит оформление веб-страниц.

    Предположим, если юзер заходил на сайт, его браузер сбережет в своем личном кэшe его оформление. И после завершения вышедшего свежего оформления пользователь его не сможете увидеть, поскольку ему будет предоставлено оформление, сохраненное в его кэше. Помимо этого, он также сохраняет хронологию посещений веб-страниц. Если юзер не желает, чтобы кто-либо мог узнать какие сайты он посещал, ему также следует очистить память.

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

    Наличие резервирования места для данных и хранения в них копий открывает широкие возможности по значительной оптимизации работы процессора любого устройства:

    • стационарного компьютера;
    • ноутбука, нетбука;
    • планшета;
    • смартфона и проч.

    В том числе это заметно сокращает время его бездействия. Таким образом, удалять «кэшированные данные» не только можно, но и нужно.

    Основной проблематикой кэширования является быстрота реакции на запросы к основным системам хранения и обработки входящей и исходящей структурированной информации.

    Представьте, что необходимо осуществить быструю передачу информации, однако скорость доступа к данным крайне низкая. Или другая ситуация: скорость хорошая, но мало доступной памяти или ширина канала недостаточная, или процессорные и дисковые факторы мешают осуществить задачу. В этом случае кэширование – это единственный выход из ситуации.

    Виды кэширования

    Кэширование (или кэш) – это некий промежуточный буфер, в котором хранятся данные. Благодаря кэшированию страница сайта не воссоздается заново для каждого пользователя. Кэширование позволяет осуществлять работу с большим количеством данных в максимально сжатые сроки и при ограниченных ресурсах (серверных и пользовательских).

    Необходимо понимать, что работу с данными можно производить как на стороне клиента, так и на сервере. Притом, серверная обработка данных централизована и имеет ряд несомненных преимуществ (особенно для службы поддержки).


    Существует несколько видов кэширования, предлагаем рассмотреть каждый вид, его особенности и рекомендации по применению:
    1. Браузерное кэширование или клиентское кэширование
    Представляет собой составление для браузера команды использовать имеющуюся кэшированную копию. Работа такого кэширования основана на том, что при повторном посещении, браузеру отдаётся заголовок 304 Not Modified, а сама страница или картинка загружаются из локального пользовательского кэша. Получается, что вы экономите на трафике между браузером посетителя и хостингом сайта. Соответственно, страница вашего сайта начинает загружаться быстрее.
    1.1 Кэширование файлов и картинок
    Браузерное кэширование как нельзя лучше подходит для сайтов, содержащих большое количество изображений: картинка не скачивается каждый раз при открытии сайта, а просто загружается через кэш браузера.


    Это первый уровень кэширования, который состоит в отдаче заголовка «expired» и заголовка «304 Not Modified» . Наиболее эффективным считается кэширование на 2 недели.

    Однако в данном случае есть важный нюанс: если изображение на сайте меняется, то браузер узнает об этом не сразу, а только если выждать expiry или сбросить кэш в самом браузере. Это не очень эффективно, если файл постоянно изменяется и необходимо постоянно отдавать его актуальную версию.

    1.2 Кэширование https
    Специальные заголовки вида strict-security. Позволяет браузеру всегда обращаться по https к выбранному домену. Сохраняет это состояние довольно жёстко и, в случае отмены этого вида кэша, браузер ещё довольно долго будет пытаться загрузить страницу по https, при этом игнорируя текущие заголовки.
    1.3 Кэширование центра сертификации
    Так называемый, stamp центра сертификации.

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

    1.4 Кэширование страниц
    Когда страница уже сгенерирована, нужно постоянно отслеживать ее актуальность. Для этого вы должны использовать серверный кэш с отслеживанием времени изменения отдельных частей страницы (если страница строится из множества динамически генерируемых блоков). При таком подходе в каждом ответе от сервера установлены специальные заголовки, обозначающие время изменения страницы, которые затем отправляются браузером пользователя при повторном обращении к странице сайта. Сервер при получении таких заголовков можем проанализировать текущее состояние страницы (возможно, даже отрисовать её), но вместо содержимого страницы отдать заголовок «304 Not Modified» , что для пользовательского браузера будет означать, что можно показать страницу из своего (браузера пользователя) кэша.

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

    Как правило, кэш подразделяется по типу пользователей:

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

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

    2. Серверное кэширование
    Под серверным кэшированием понимаются все виды кэширования, при котором данные хранятся на серверной стороне. Эти данные не доступны клиентским браузерам. Кэш создаётся и хранится по принципу «один ко многим» (многие, в данном случае, - это клиентские устройства).

    2.1 Кэширование страницы целиком
    Наиболее эффективный кэш. Чем он интересен? Самое большое его достоинство в том, что отдача страницы происходит практически в момент обращения, как следствие – это возможность обработки миллионов запросов даже на самом слабом сервере со скоростью работы памяти и с незначительным задействованием процессора.

    Пожалуй, любой когда-либо мечтал о сайте, работающем со скоростью «ping» или быстрее.
    Но и у этого типа кэша есть свои минусы: например, невозможность кэшировать страницы для авторизованного пользователя, либо пользователя, содержимое страницы которого зависит от текущих переменных пользователя.

    Используйте этот кэш, если серверу известны все статичные состояния внешних данных, такие как: uri, get (без дополнительных параметров), пользователь не авторизован - то есть, фактически, это идеальное состояние страницы для гостевых пользователей. Учитывайте тот факт, что при таком кэшировании архитектура сайта или приложения всегда должна однотипно обрабатывать входящие запросы и отдавать однотипные ответы. Такое состояние есть в любом приложении или сайте, его нужно лишь отследить и применить к нему кэш.

    Кэширование страниц целиком, чаще всего, применяют в каких-то экстренных случаях, при этом кэш страниц сохраняется на заранее указанное время (от 2 минут), в течение которого ответы от сервера однотипны (не позволяйте браузеру кэшировать это).

    2.2 Кэширование результатов компиляции php-файлов
    Различают как чистую компиляцию кода, так и его оптимизацию во время компилирования (подмена скриптов). Наиболее яркие примеры:

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

    2.3 Кэширование отдельных блоков страницы
    Это, пожалуй, самый интересный, но и сложный вид кэширования. Тем не менее, он тоже может быть эффективным, и на его примере легче всего объяснить принципы кэширования в целом.
    Необходимо отслеживать: состояние таблиц, состояние сессии пользователя, выключать ли кэширование при POST или GET запросах (http query), зависимость от текущего адреса, постоянство кэширования (при изменении предыдущих условий) или его динамическую подстройку.

    Кэширование отдельных блоков страниц лучше других типов кэширования подойдёт, если вам нужно, например, уменьшить количество запросов к базе данных от реальных (авторизованных) пользователей. Кстати, при правильно заданных зависимостях, он будет работать даже эффективнее, чем все последующие виды кэширования.

    Почему этот вид кэширования настолько важен? Всё дело в том, что расширение пула серверов баз данных намного более сложная задача, чем расширение пула серверов php-части сайта. Более того, php конфликты состояния кэширования решаются гораздо легче, чем конфликты при работе с множеством баз данных.

    2.4 Кэширование php на основе неразделяемых ресурсов
    Лучше всего подходит при стандартизации запросов, получении данных из общих ресурсов, наличии внутренних переменных, к которым php-ресурсы обращаются несколько раз при генерации страницы.
    2.5 Кэширование php на основе общих ресурсов
    Такое кэширование применяйте для хранения сериализированных данных. Например: конфигурационного файла, состояния таблиц, списков файловой системы.
    2.6 Кэширование mysql на основе query cache
    Это довольно известная и наиболее освещённая тема. Тем не менее, хотелось бы рассмотреть специфику работы с timestamp и то, как можно избежать постоянного сброса query cache.

    Наверняка, вы регулярно сталкивались с ситуацией, когда необходимо отдать новые материалы, дата публикации которых уже разрешена текущим timestamp? Проще говоря,

    WHERE show_ts<=UNIX_TIMESTAMP()

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

    Мы предлагаем следующий выход из ситуации:

    Как правило, любой материал публикуется в определенные моменты времени. К примеру, 00:00. Всё что нужно сделать - создать запрос, который будет оценивать таблицу по максимальной дате, при этом, меньшей текущей.

    Что-то вроде:

    SELECT SQL_NO_CACHE MAX(show_ts) … WHERE show_ts<=UNIX_TIMESTAMP();

    Да, этот запрос кэшироваться не будет, но будут кэшироваться все запросы к этой таблице, если их количество больше одного. Эта простая операция существенно улучшит жизнь sql-кэширования.

    Кэшировать эти запросы имеет смысл, если чтений из таблицы немного больше чем записи.

    2.7 Кэширование mysql результатов работы, агрегирующие таблицы
    Существует правило: обновлений данных должно быть значительно меньше, чем чтения для их отдачи.

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

    Что выбирать для агрегирования? Обычно это какая-то статистическая информация о числе записей, дате последнего обновления, авторе последнего обновления и тому подобное.

    Заключение

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

    Схема работы кэша

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

    Прогресс требовал увеличения объемов для хранения данных , в то время как быстрота их обработки отставала с самого зарождения компьютеров. Именно из-за этого и был разработан такой «мост». Процесс занесения информации в кэш-память получил название «кэширование ». Собственно, поэтому и важно её своевременно очищать – для сохранения эффективности считывания.

    Кэширование в браузерах


    Алгоритм кэширования в браузерах

    Зачастую, говоря о кэшировании, многие вспоминают о cache -файлах в браузерах. И неудивительно, так как их очистка – один из основных советов, который дают пользователям при возникновении ошибок.

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

    Кэш в Windows

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

    Контролирует данный процесс, так называемый кэш-менеджер , который периодически избавляется от неактуальных ресурсов. Причем, именно эта периодичность и является ключевым фактором эффективной работы: если файлы удалять слишком часто, то система будет тратить время, считывая их вновь, а если слишком редко – попросту не останется места для новых сведений.

    Кэш на андройде

    На смартфонах с операционной системой Android ситуация выглядит похожим образом, за одним существенным «но» — объем предоставленной памяти значительно ниже , чем на персональном компьютере. Помимо этого, программы после запуска хранятся в трей-листе, откуда их потом можно заново развернуть , со всеми сохраненными изменениями, совершенными в последней сессии.

    К сожалению, ОС не очень хорошо справляется с очисткой лишних файлов, из-за чего, при длительном пользовании, приложения могут работать некорректно , а само быстродействие телефона значительно снизится . Для предотвращения этого, рекомендуется использовать сторонние программы , которые производят очистку, например, Clean Master.

    Диаграмма кэша памяти ЦПУ

    Кэш - это память с большей скоростью доступа, предназначенная для ускорения обращения к данным, содержащимся постоянно в памяти с меньшей скоростью доступа (далее «основная память»). Кэширование применяется ЦПУ , жёсткими дисками , браузерами и веб-серверами .

    Кэш состоит из набора записей. Каждая запись ассоциирована с элементом данных или блоком данных (небольшой части данных), которая является копией элемента данных в основной памяти. Каждая запись имеет идентификатор , определяющий соответствие между элементами данных в кэше и их копиями в основной памяти.

    Когда клиент кэша (ЦПУ, веб-браузер, операционная система) обращается к данным, прежде всего исследуется кэш. Если в кэше найдена запись с идентификатором, совпадающим с идентификатором затребованного элемента данных, то используются элементы данных в кэше. Такой случай называется попаданием кэша . Если в кэше не найдено записей, содержащих затребованный элемент данных, то он читается из основной памяти в кэш, и становятся доступным для последующих обращений. Такой случай называется промахом кэша . Процент обращений к кэшу, когда в нём найден результат, называется уровнем попаданий или коэффициентом попаданий в кэш.

    Например, веб-браузер проверяет локальный кэш на диске на наличие локальной копии веб-страницы, соответствующей запрошенному URL. В этом примере URL - это идентификатор, а содержимое веб-страницы - это элементы данных.

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

    При модификации элементов данных в кэше выполняется их обновление в основной памяти. Задержка во времени между модификацией данных в кэше и обновлением основной памяти управляется так называемой политикой записи .

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

    В кэше с отложенной записью (или обратной записью ) обновление происходит в случае вытеснения элемента данных, периодически или по запросу клиента. Для отслеживания модифицированных элементов данных записи кэша хранят признак модификации (изменённый или «грязный» ). Промах в кэше с отложенной записью может потребовать два обращения к основной памяти: первое для записи заменяемых данных из кэша, второе для чтения необходимого элемента данных.

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

    Кэш центрального процессора

    Кэширование результатов работы

    Многие программы записывают куда-либо промежуточные или вспомогательные результаты работы, чтобы не вычислять их каждый раз, когда они понадобятся. Это ускоряет работу, но требует дополнительной памяти (оперативной или дисковой). Примером такого кэширования является индексирование баз данных.

    Примечания

    См. также

    Смотреть что такое "Кэширование" в других словарях:

      кэширование - Процесс придания кругленому корешку книжного блока грибообразной формы. Тематики полиграфия …

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

      кэширование данных - Процесс выполнения задачи с использованием кэш памяти. Кэширование является способом хранения страниц Web, просмотренных пользователем. Дело в том, что пользователь, читая страницы Web, часто возвращается к тем из них, которые он уже видел. Для… … Справочник технического переводчика

      У этого термина существуют и другие значения, см. Кэш (значения). Кэш или кеш (англ. cache, от фр. cacher «прятать»; произносится «кэш») промежуточный … Википедия

      Кэш (англ. cache, произносится kæʃ кЭш) промежуточный буфер с быстрым доступом, содержащий копию той информации, которая хранится в памяти с менее быстрым доступом, но с наибольшей вероятностью может быть оттуда запрошена. Доступ к данным в… … Википедия

    Кэширование — это один из способов оптимизации Web приложений. В любом приложении встречаются медленные операции (SQL запросы или запросы к внешним API), результаты которых можно сохранить на некоторое время. Это позволит выполнять меньше таких операций, а большинству пользователей показывать заранее сохраненные данные.

    Наиболее популярная технология кеширования для Web приложений — Memcache .

    Когда нужно кэшировать

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

    • Используйте классы или функции, для работы с данными. Не используйте повторяющихся SQL выборок в основном приложении.
    • Используйте обертки для работы с внешними API.

    Что кэшировать?

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

    • Результаты запросов к внешним сервисам (RSS, SOAP, REST и т.п.).
    • Результаты медленных выборок из базы данных.
    • Сгенерированные html блоки либо целые страницы.

    Кэширование выборок из баз данных

    Запросы к базе данных — наиболее распространенный пример. На основе Мemcache реализуется очень просто:

    !$list = memcache_get("online_users") ) { $sql = "SELECT * FROM users WHERE last_visit > UNIX_TIMESTAMP() - 60*10"; $q = mysql_query($sql); while ($row = mysql_fetch_assoc($q)) $list = $row; memcache_set("online_users", $list, 60*60); } return $list; } $list = get_online_users(); ...

    # Запрос на получение пользователей кэшируется на 1 час

    Обновление данных

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

    memcache_delete("user" . $id); }

    Кэширование списков

    Допустим, Вы кэшируете данные каждого пользователя, как в примере, а также их списки (например, список online пользователей). При обновлении данных пользователя, Вы удаляете данные из кэша только для указанного пользователя. Но его данные могут также присутствовать в списке online пользователей, которые тоже лежат в кэше. Сбрасывать списки при каждом обновлении данных любого пользователя не эффективно. Поэтому обычно используют такой подход:

    1. Кэшируют списки, которые состоят только из ID пользователей.
    2. Для вывода списка отправляют отдельный запрос для получения данных каждого пользователя.

    Реализация выглядит так:

    id FROM users WHERE last_visit > UNIX_TIMESTAMP() - 60*10"; $q = mysql_query($sql); while ($row = mysql_fetch_assoc($q)) $list = $row["id"] ; memcache_set("online_users", $list, 60*60); } return $list; } $list = get_online_users(); foreach ($list as $id) { $user = get_user($id); ... }

    # Получим список ID пользователей и для каждого из них получим актуальные данные

    Для получения данных сразу нескольких объектов можно использовать Multiget .

    Повторные запросы

    Некоторые данные могут запрашиваться несколько раз в рамках одной страницы, например:

    get_user($_SESSION["id"])["name"] )?>

    ... Email: get_user($_SESSION["id"])["email"] ?> ... get_user($_SESSION["id"])["nick"] ?>">Моя страница ...

    Каждый вызов get_user() будет получать данные из кэша. Если Memcache стоит на отдельном сервере, это вызовет большой сетевой трафик и задержки.

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

    global $app_cache; if ($app_cache["user" . $id]) return $app_cache["user" . $id]; if (!$data = memcache_get("user" . $id)) { $sql = "SELECT * FROM users WHERE id= " . intval($id); $q = mysql_query($sql); $data = mysql_fetch_assoc($q); memcache_set("user" . $id, $data, 60*60); $app_cache["user" . $id] = $data; } return $data; } function save_user($id, $data) { global $app_cache; mysql_query("UPDATE users SET ... WHERE id = " . intval($id)); memcache_delete("user" . $id); unset($app_cache["user" . $id]); }

    В реальных приложениях, имеет смысл иметь обертку для Memcache с дополнительным кэшом:

    inner_cache)) return $this->inner_cache[$key]; $data = memcache_get($this->resource, $key); $this->inner_cache[$key] = $data; return $data["value"]; } public static function set($key, $value, $ttl) { memcache_set($key, $value, $ttl); $this->inner_cache[$key] = $value; } public static function del($key) { memcache_delete($key); unset($this->inner_cache[$key]); } }

    # $inner_cache хранит дополнительный кэш

    Внимание. Использование этого подхода может приводить к утечкам памяти в случаях, когда идет работа с большим количеством данных в кэше. Например, в cron-задачах (допустим, мы перебираем всех пользователей для отправки рассылки). Тогда лучше добавить отключение внутреннего кэша:

    public static $inner_cache_enabled = true; public static function get($key) { if (self::$inner_cache_enabled && array_key_exists($key, $this->inner_cache)) return $this->inner_cache[$key]; $data = memcache_get($this->resource, $key); $this->inner_cache[$key] = $data; return $data["value"]; } public static function set($key, $value, $ttl) { memcache_set($key, $value, $ttl); if (self::$inner_cache_enabled) $this->inner_cache[$key] = $value; } public static function del($key) { memcache_delete($key); unset($this->inner_cache[$key]); } } ... mem_cache::$inner_cache_enabled = false;

    # Отключаем внутренний кэш

    Подогревание

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

    # операции по обновлению внешних ресурсов $data = file_get_contents("http://rss.com/rss"); memcache_set("rss", $data, 60*60); }

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

    Время жизни (ttl)

    ttl (время жизни) — это время, после которого, данные будут удалены из кэша. В Memcache устанавливается в секундах:

    60*60 );

    # Установка ttl на 1 час

    Чаще всего ttl ставят от нескольких минут до нескольких дней. Не используйте значение 0 (бесконечное хранение), это может засорить память.

    LRU

    Любой кэш работает по принципу вытеснения если ему не хватает памяти. Т.е. если Memcache может использовать максимум 1G памяти, а Вы пытаетесь сохранить ключей на 2G, то половину из этих данных Memcache удалит. Для определения, какие именно ключи удалять, используется алгоритм LRU (Least Recently Used):

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

    Кэширование очень медленных запросов

    Представьте, что у Вас есть запрос, который выполняется 10 секунд. Вы сохраняете его в кэш на 1 час. Когда проходит это время, данные в кэше удаляются. В первые 10 секунд после этого Вы сталкиваетесь с ситуацией, когда несколько пользователей одновременно вызывают этот тяжелейший запрос. Это может привести к катастрофическим последствиям, т.к. в течение 10 секунд может быть несколько сотен или тысяч таких вызовов.

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

    Атомарные операции

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

    Memcache поддерживает две атомарные операции увеличения и уменьшения чисел:

    # Увеличит счетчик на 1, функция memcache_decrement() уменьшает счетчик

    Самое важное

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