Користувальницькькі налаштування

Налаштування сайту


ubillingcache

Розбіжності

Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.

Посилання на цей список змін

ubillingcache [2022/09/24 14:39]
127.0.0.1 зовнішнє редагування
ubillingcache [2023/06/16 15:39]
nightfly
Рядок 1: Рядок 1:
-====== Подсистема кэширования ======+====== Підсистема кешування ======
  
-Представляет из себя штатный уровень абстракции для задач требующих кэширования данных на определенное время. Присутствует в составеначиная с Ubilling 0.6.8. Все брутально и прямолинейно как всегда. Реализовано в виде класса UbillingCache и управляется следующими опциями [[alteriniconf|alter.ini]]:+Являє собою штатний рівень абстракції для задач, котрі вимагають кешування даних на певний час. Присутній у складіпочинаючи з Ubilling 0.6.8. Усе брутально і прямолінійно як завжди. Реалізовано у вигляді класу UbillingCache і керується такими опціями [[alteriniconf|alter.ini]]:
  
 <code ini> <code ini>
-Устанавливает тип хранилища системного кэшавозможные значения: +Встановлює тип сховища системного кешу, можливі значення: 
-; files - в файлах, используется по-умолчанию, не требует конфигурации +; files - у файлах, використовується за замовчуванням, не потребує конфігурації 
-; memcached - использует Memcached для кэширования данных в оперативной памяти на основе хеш-таблиц +; memcached - використовує Memcached для кешування даних в оперативній пам'яті на основі хеш-таблиць 
-; redis - использует Redis как сетевое журналируемое хранилище данных типа "ключ — значение+; redis - використовує Redis як мережеве журнальоване сховище даних типу "ключ значення
-; fake - фэйковый кэш - считается, что он всегда пуст+; fake - фейковий кеш - вважається, що він завжди порожній
 UBCACHE_STORAGE=files UBCACHE_STORAGE=files
-; Необязательные опцииустанавливающие если требуется альтернативные параметры memcached и redis+; Необов'язкові опціїщо встановлюють, якщо потрібно, альтернативні параметри memcached і redis
 ;MEMCACHED_SERVER=localhost ;MEMCACHED_SERVER=localhost
 ;MEMCACHED_PORT=11211 ;MEMCACHED_PORT=11211
 ;REDIS_SERVER=localhost ;REDIS_SERVER=localhost
 ;REDIS_PORT=6379 ;REDIS_PORT=6379
-;Включает запись логирования работы кэша в exports/cache.log. Оно убивает быстродействие и используется только для отладки.+микає запис логування роботи кешу в exports/cache.log. Воно дуже вбиває швидкодію і використовується тільки для налагодження.
 ;UBCACHE_DEBUG=1 ;UBCACHE_DEBUG=1
 </code> </code>
  
-====== Пример использования ====== +====== Приклад використання ====== 
-Вся работа с классом намотана вокруг метода **getCallback**:+ 
 +Вся робота з класом намотана навколо методу **getCallback**:
  
 <code php> <code php>
-$cache = new UbillingCache(); // Создаем объект +$cache = new UbillingCache(); // створюємо обкт 
-$cacheTime=60; // в секундах+$cacheTime=60; // час кешування в секундах
 $someData = $cache->getCallback('EXAMPLE_KEY', function () { $someData = $cache->getCallback('EXAMPLE_KEY', function () {
     return (web_AnalyticsPaymentsMonthGraph('2015'));     return (web_AnalyticsPaymentsMonthGraph('2015'));
 }, $cacheTime); }, $cacheTime);
  
-//показываем результат+//відображаємо результат
 show_window(__('Example data from cache'), $someData); show_window(__('Example data from cache'), $someData);
 </code> </code>
-Стоит заметить, что вы можете не париться о сериализации своих данных при засовывании в кэш. На выходе вы получите тот же тип данных, который предполагался изначально. 
-А что по скорости? А как-то так: [[labs#ubillingcache_files_vs_memcached_vs_redis|Бенчмарки и всякое такое]] 
  
-====== ООП или использование в своем классе ======+Варто зауважити, що ви можете не перейматися серіалізацією своїх даних під час засовування в кеш. На виході ви отримаєте той самий тип даних, який передбачався спочатку.
  
-Для протаскивания свойств вашего объекта внутрь анонимной функции коллбека вам придется использовать небольшой хак.+====== ООП або використання у своєму класі ====== 
 + 
 +Для протягування властивостей вашого обкта всередину анонімної функції коллбека вам доведеться використовувати невеликий хак.
  
 <code php> <code php>
      public function sampleFunction() {      public function sampleFunction() {
         $result = '';         $result = '';
-        $this->initCache(); // тут мы инициализируем общий для объекта экземпляр кэша +        $this->initCache(); // тут ми ініціалізуємо загальний для обкта екземпляр кешу 
-                            // а именно создаем $this->cache и $this->timeout +                            // а саме створюємо $this->cache і $this->timeout 
-        $obj = $this; // а вот собственно и хак+        $obj = $this; // а ось власне і хак
         $result = $this->cache->getCallback('SAMPLE_FUNCT_CACHE', function() use ($obj) {         $result = $this->cache->getCallback('SAMPLE_FUNCT_CACHE', function() use ($obj) {
-            return ($obj->getLargeData()); // к сожалению getLargeData может быть только публичным методом+            return ($obj->getLargeData()); // на жаль getLargeData може бути тільки публічним методом
         }, $this->timeout);         }, $this->timeout);
         return ($result);         return ($result);
Рядок 52: Рядок 53:
 </code> </code>
  
-====== Очистка ====== +====== Очищення ====== 
-Хотя данные из кэша самостоятельно удаляются по прошествии времени $expiration указываемого в секундах, возможно вам потребуется очистить данные кэша "вот прямо сейчас". Для принудительной очистки конкретного ключа кэша, мы можем использовать публичный метод **delete** как-то так:+ 
 +Хоча дані з кеша самостійно видаляються після закінчення часу $expiration, що вказується в секундах, можливовам буде потрібно очистити дані кеша "ось прямо зараз". Для примусового очищення конкретного ключа кеша, ми можемо використовувати публічний метод **delete** якось так: 
 <code php> <code php>
 $cache->delete('EXAMPLE_KEY'); $cache->delete('EXAMPLE_KEY');
 </code> </code>
  
-====== А если без наркомании? ====== +====== А якщо без наркоманії? ======
-Начиная с релиза 0.8.5 вы можете использовать это все просто на уровне set/get указывая время хранения в кэше. Да, в этом случае нам придется самим решать когда и как засовывать данные в кэш, в случае его устаревания.+
  
-Как-то так:+Ви можете використовувати це все просто на рівні set/get, вказуючи час зберігання даних ключа в кеші. Так, у цьому разі нам доведеться самим вирішувати, коли і як засовувати дані в кеш, у разі його старіння/інвалідації. 
 + 
 +Якось так:
  
 <code php> <code php>
Рядок 69: Рядок 73:
  
  
-//пытаемся получить данные из кэша+//намагаємося отримати дані з кешу
 $dataInCache=$cache->get('CACHE_TEST_KEY', $cacheTime); $dataInCache=$cache->get('CACHE_TEST_KEY', $cacheTime);
 if (!empty($dataInCache)) { if (!empty($dataInCache)) {
-    //если чего-то получено - показываем это в окошке+    //якщо щось отримано і воно не порожнє - показуємо це у віконці
     show_window(__('Data from cache'),$dataInCache);     show_window(__('Data from cache'),$dataInCache);
 } else { } else {
-    //запихиваем данные в кэш на сколько нам нужно времени+    //запихаємо дані в кеш на скільки нам потрібно часу
     $cache->set('CACHE_TEST_KEY', $dataToPush, $cacheTime);     $cache->set('CACHE_TEST_KEY', $dataToPush, $cacheTime);
     show_warning(__('No data in received, cache expired'));     show_warning(__('No data in received, cache expired'));
Рядок 81: Рядок 85:
 </code> </code>
  
-Следует также помнитьчто в при прямой работе с помощью set/get рекомендуется указывать таймаут кэширования в обоих функциях. Так как для стораджей типа memcached или redis на таймаут хранения данныхвлияет непосредственно set и реализован средствами самого хранилища а для хранилища files по вполне понятным причинам, актуальность содержащихся данных проверяется во время осуществления get (файлы на ФС не умеют сами по-по себе удаляться, удивительно, да?) +Слід також памтатищо при прямій роботі за допомогою set/get рекомендується вказувати таймаут кешування в обох функціях. Оскільки для стораджів типу memcached або redis на таймаут зберігання даних впливає безпосередньо set, який реалізовано засобами самого сховищаа для сховища files з цілком зрозумілих причин актуальність даних, що містяться в ньому, перевіряється під час здійснення get (файли на ФС не вміють самі по собі видалятися, дивно, чи не так?).
  
 ====== Memcached ====== ====== Memcached ======
-Вополне понятно, что для UBCACHE_STORAGE=memcached требуется включенный и работающий сам memcached. + 
 +Цілком зрозуміло, що для UBCACHE_STORAGE=memcached потрібен увімкнений і працюючий сам memcached. 
  
 /etc/rc.conf /etc/rc.conf
-<file ini>+<file ini rc.conf>
 memcached_enable="YES" memcached_enable="YES"
 memcached_flags="-l 127.0.0.1 -m 128 -I 10M" memcached_flags="-l 127.0.0.1 -m 128 -I 10M"
Рядок 99: Рядок 103:
  
 ====== Redis ====== ====== Redis ======
-Если в вашу сборку пакетов устанавливаемых [[setupubinstaller|UBinstaller]] (в новых бинарниках уже должен быть) не входит Redis, вы можете доустановить его вручную. 
  
-Как проверить есть ли он? Да просто методом  **pkg info | grep redis**. Если нету - устанавливаем, если есть - переходим к включению и запуску.+Вмикаємо в /etc/rc.conf
  
-<code> +<file ini rc.conf>
-# cd /usr/ports/databases/redis +
-# make && make install  +
-# cd /usr/ports/databases/pecl-redis +
-# make && make install  +
-# apachectl restart +
-# /usr/local/etc/rc.d/redis start +
-</code> +
- +
- +
-Включаем в /etc/rc.conf +
-<code ini>+
 redis_enable="YES" redis_enable="YES"
-</code>+</file>
  
-с последующим запуском+з подальшим запуском
 <code> <code>
 # service redis restart # service redis restart
 </code> </code>
  
-====== Хочу особенное хранилище ======+====== Хочу особливе сховище ======
  
-Допустим, по какой-то причине, вам хочется в каком-то вашем, конкретном модуле использовать хранилище кэша отличающееся от указанного в опции UBCACHE_STORAGE. Допустим  вам требуется много быстрого чтения memcached, а для остальной системы вы используете redis который в данном конкретном случае оказывается менее продуктивным исходя из бенчмарков. Либо вы используете memcached с маленькими ключами, но вам резко требуется положить в кэш какой-то больший объем данных помещающийся в files либо redis к которому вы не ожидаете очень частых обращенийВ таком случаеначиная с релиза 1.1.5 вы можете использовать переопределение типа хранилища прямо в конструкторе класса, например так:+Припустимо, з якоїсь причини, вам хочеться в якомусь вашому, конкретному модулі використовувати сховище кешу, що відрізняється від зазначеного в опції UBCACHE_STORAGE. Припустимо, вам потрібно багато швидкого читання memcached, а для решти системи ви використовуєте redis, який у цьому конкретному випадку може виявитись менш продуктивним, виходячи з бенчмарків. Або ви використовуєте memcached з маленькими ключами, але вам різко потрібно покласти в кеш якийсь більший обсяг даних, що вміщується в files або redis, до якого ви не очікуєте дуже частих зверненьУ такому разіпочинаючи з релізу 1.1.5 ви можете використовувати перевизначення типу сховища прямо в конструкторі класу, наприклад так:
  
 <code php> <code php>
-$this->cacheFiles = new UbillingCache('files'); // здесь я хочу файловый кэш, "потому-что". +$this->cacheFiles = new UbillingCache('files'); // тут я хочу файловий кеш, "тому-що". 
-$this->cacheRedis = new UbillingCache('redis'); // а для этого экземпляра - редис.  +$this->cacheRedis = new UbillingCache('redis'); // а для цього екземпляра - редис.  
-// а в конфиге для всей остальной системы у нас будет вообще memcached и все это только потому, что наркотики - зло.+// а в конфігурації для всієї іншої системи в нас буде взагалі memcached і все це тільки тому, що наркотики - зло.
 </code> </code>
ubillingcache.txt · Востаннє змінено: 2023/06/16 15:39 повз nightfly