/dimmount.rediscache

Модуль Битрикс для использования Redis в роли сервера кеша

Primary LanguagePHPMIT LicenseMIT

dimmount.rediscache

Модуль Битрикс для использования Redis в роли сервера кеша

Установка Redis

Итак, для начала устанавливаем redis. (если у вас windows, то можно скачать инсталлятор отсюда https://github.com/MSOpenTech/redis/releases)
Поскольку сервер будет использоваться для хранения кэша данных, то настроим в конфиге максимальный объем используемой памяти:

maxmemory 100mb

и политику вытеснения из памяти:

maxmemory-policy volatile-ttl

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

Настройка PHP

Для работы с redis в PHP необходимо установить расширение https://github.com/phpredis/phpredis(под windows готовые DLL можно взять отсюда http://www.apachelounge.com/viewtopic...php?t=6359)

extension=php_igbinary.dll
extension=php_redis.dll

Настройка Bitrix

Модуль устанавливается обычным способом. Во время установки в файл .settings вносится настройка кеша:

'type' => array(
    'class_name' => 'CPHPCacheRedis',
    'required_file' => 'modules/{имя модуля}/include.php'
)

при деинсталляции модуля настройки возвращаются к типу кеширования "files"

По умолчанию для сервера Redis используются стандартные адрес 127.0.0.1 и порт 6397

Для ручного указания адреса сервера можно задать константы в dbconn.php

define("BX_REDIS_IP", '127.0.0.1');
define("BX_REDIS_PORT", '6379');

Очистка кэша (cleanDir)

При кешировании в битриксе используются три уровня:

  • basedir
  • initdir
  • filename

когда мы в первый раз делаем запись в кэш, то создаются 3 записи:

  • запись с ключом basedir, которая содержит рандомный хэш basedir_version
  • запись с ключом basedir_version . "|" . init_dir , которая содержит рандомный хэш initdir_version
  • и собственно наша запись с ключом basedir_version . "|" . initdir_version . "|" filename , содержащая кэшируемые данные

При массовой очистке кэша, например функцией cleanDir или кнопкой очистки кэша из админки, битрикс поступает следующим образом:

  • очищает запись с ключом basedir_version . "|" . init_dir (в случае с cleanDir)
  • очищает запись с ключом basedir (в случае с «очистить кэш» из админки)

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

$keys = self::$obRedis->keys(self::$basedir_version[$basedir] . "|*");
self::$obRedis->del($keys);
self::$obRedis->del($this->sid . $basedir);