кеширование ajax-запроса

Ajax возвращается в ввиде json, можно ли в сниппете кешировать полученные данные и затем подставлять их в ответ return json_encode(array(тут массив данных))?
Пётр Молчанов
08 сентября 2014, 13:57
modx.pro
1 221
0

Комментарии: 12

Володя
08 сентября 2014, 18:15
0
$modx->cacheManager()
    Пётр Молчанов
    08 сентября 2014, 18:20
    0
    я уже читал это rtfm.modx.com/revolution/2.x/developing-in-modx/advanced-development/caching
    но не догоняю как можно применить для ajax
      Алексей Ерохин
      08 сентября 2014, 18:25
      0
      Если у вас есть сниппет, значит вы в нем можете проверять существование данных в кеше и возвращать их. Если отсутствуют — получать из базы и заносить в кеш.
        Пётр Молчанов
        08 сентября 2014, 18:59
        0
        это я тоже понял, но как мне хранить данные, которые надо вернуть в json? т.е. в сниппете возвращается так:
        return json_encode(array(
                    массив данных
                ));
        как хранить в кеше значения для каждого ключа?
          Володя
          08 сентября 2014, 20:51
          0
          по данным запроса формируете ключ типа
          md5($параметр1.$параметр2 и тд )
          и сохраняете в кеш с этим ключем…

          и обратная операция по ключу получаете значение из кеша…
            Пётр Молчанов
            09 сентября 2014, 10:40
            0
            эммм… могли бы вы поподробней расписать?)
              Володя
              09 сентября 2014, 10:55
              0
              К примеру данные запроса — $d1,$d2,$d3
              // записали в кеш
              $modx->cacheManager->set('pre_'.md5( $d1,$d2,$d3 ), $data, 7200, $CacheOptions );
              // взяли из кеша
              $modx->cacheManager->get('pre_'.md5( $d1,$d2,$d3 ) , $CacheOptions );
              
              $CacheOptions = array(
              xPDO::OPT_CACHE_KEY => 'default/pre_'
              );
                Илья Уткин
                09 сентября 2014, 10:56
                +2
                // Проверяем, есть ли в кеше сгенерированные данные
                $output = $modx->cacheManager->get($key);
                
                if (empty($output)) {
                  // Генерируем данные
                  $output = array(
                    'success' => true,
                    'param' => 'value'
                  );
                  // Сохраняем данные в кеш
                  $modx->cacheManager->set($key,$output);
                }
                
                return $modx->toJSON($output);
                  Пётр Молчанов
                  09 сентября 2014, 11:14
                  0
                  вроде получилось. а как убедиться, что данные берутся именно из кеша? у меня apc
                    Володя
                    09 сентября 2014, 11:15
                    0
                    открой ручками файл кеша внеси в него изменения и посмотри что отдаст в ответ
                      Пётр Молчанов
                      09 сентября 2014, 11:25
                      0
                      у мя apc, нету файлов. но, судя по времени отклика, работает
      Пётр Молчанов
      09 сентября 2014, 11:37
      0
      Так-то круто получается :) Спасибо всем за помощь!
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        12