Nano Hash - криптовалюты, майнинг, программирование

ZF2 - Сохранение результата функции в кеше

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


Ответы:


1

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

config/autoload/global.php

'service_manager' => array(
     'abstract_factories' => array(
            'Zend\Cache\Service\StorageCacheAbstractServiceFactory',
      )
),

config/autoload/cache.global.php

return array(
    'caches' => array(
         // Cache config
    )
)

Используйте factory для создания своего View Helper:

Application/Module.php::getViewHelperConfig()

'LinkHelper' => function ($sm) {
     $locator = $sm->getServiceLocator();
     return new LinkHelper($locator->get('memcached'))
}

Используйте службу кеша в вашем View Helper:

LinkHelper.php

protected $cache;

public function __construct($cache) 
{
    $this->cache = $cache;
}

public function __invoke($url) 
{
    $cacheKey = md5($url);

    if ($this->cache->hasItem($cacheKey) {
         return $this->cache->getItem($cacheKey);
    }

    $link = ''; // Parse link
    $this->cache->setItem($cacheKey, $link);

    return $link;
}
23.03.2015
  • Я получил эту ошибку (я следовал вашей инструкции и использовал связанную конфигурацию): Неперехваченное исключение «Zend\Cache\Exception\ExtensionNotLoadedException» с сообщением «Требуется версия ext/memcached ›= 1.0.0» 24.03.2015
  • Если у вас нет memcached, вы можете просто использовать кэш filesystem. Пример конфигурации вы можете увидеть здесь. И не забудьте сделать каталог data/cache доступным для записи! 24.03.2015
  • Большой! Похоже, сейчас ошибок нет, но как я могу проверить, действительно ли это работает? 24.03.2015
  • Просто измените механизм, который проверяет внешний URL, и убедитесь, что значение остается старым (оно должно быть получено из кеша). Также вы можете проверить свой каталог data/cache — здесь вы увидите несколько текстовых файлов. 24.03.2015
  • Да, похоже, у меня есть папка в /cache с файлом .dat для каждого проверенного URL. Я так понимаю, что setItem($cacheKey, $link) создает подпапку с файлом $cacheKay.dat, содержащим $link? Можно ли вместо этого иметь только один файл со всеми ссылками внутри? Или, по крайней мере, чтобы все эти файлы находились в одной подпапке? 24.03.2015
  • Это стандартный механизм адаптера FileSystem, и я думаю, что изменить его логику будет сложно. Попробуйте поиграть с параметры. И, конечно же, вы можете написать собственный кеш-адаптер, если у вас есть много времени и терпения :) 25.03.2015
  • Эр, я думаю, что это будет делать на данный момент! Спасибо за вашу помощь! :) 25.03.2015
  • Новые материалы

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

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..