Wiki Bitrix

Кеширование действия

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

somejob.php
<?php
 
namespace Vendor\Dealer\Jobs;
 
use \CPHPCache as CPHPCache;
 
class SomeJob
{
 
  public function __construct($partnerGuid, $ttl = 3600)
  {
    $this->partnerGuid = $partnerGuid;
    $this->cache_time = (int)$ttl;
    if(!$this->cache_time) {
      $this->cache_time = 3600;
    }
  }
 
  /**
   * Обновление данных при устаревании кеша
   */
  public function updateStale()
  {
    $this->initCache();
 
    if($this->cache->InitCache($this->cache_time, $this->cache_id, $this->cache_path)) {
      return;
    }
 
    $this->updateData();
    $this->saveCache();
  }
 
  /**
   * Обновление данных (принужденное) с сохранением кеша
   */
  public function updateForce()
  {
    $this->initCache();
    $this->updateData();
    $this->saveCache();
  }
 
  /**
   * Обновление данных (отметка об этом не хранится)
   */
  public function updateData()
  {
    // обновление данных
  }
 
  protected function initCache()
  {
    $this->cache = new CPHPCache();
    $this->cache_id = $this->partnerGuid;
    $this->cache_path = 'iek/order.history.ns';
  }
 
  protected function saveCache()
  {
    $this->cache->StartDataCache($this->cache_time, $this->cache_id, $this->cache_path);
    $this->cache->EndDataCache("done");
  }
 
 
}