PHPackages                             beeline/yii2-tiered-cache - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Caching](/categories/caching)
4. /
5. beeline/yii2-tiered-cache

ActiveLibrary[Caching](/categories/caching)

beeline/yii2-tiered-cache
=========================

Multi-tiered caching component for Yii2 with circuit breaker protection and automatic failover

1.0.6(6mo ago)00[2 PRs](https://github.com/pozitronik/yii2-tiered-cache/pulls)LGPL-3.0-or-laterPHPPHP ^8.4CI passing

Since Nov 6Pushed 4mo agoCompare

[ Source](https://github.com/pozitronik/yii2-tiered-cache)[ Packagist](https://packagist.org/packages/beeline/yii2-tiered-cache)[ RSS](/packages/beeline-yii2-tiered-cache/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependencies (3)Versions (10)Used By (0)

Yii2 Tiered Cache
=================

[](#yii2-tiered-cache)

[![Tests](https://github.com/pozitronik/yii2-tiered-cache/actions/workflows/tests.yml/badge.svg)](https://github.com/pozitronik/yii2-tiered-cache/actions/workflows/tests.yml)[![Codecov](https://camo.githubusercontent.com/72c82e2b8d47e9e6b4879e9f23d128e4c85c799166a57d68e507feb8682a0fc4/68747470733a2f2f636f6465636f762e696f2f67682f706f7a6974726f6e696b2f796969322d7469657265642d63616368652f6272616e63682f6d61737465722f67726170682f62616467652e737667)](https://codecov.io/gh/pozitronik/yii2-tiered-cache)[![Packagist Version](https://camo.githubusercontent.com/20cd43a101989be9646a5b57f930b9149a214b5c084787363865dfaddf7e6ea0/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6265656c696e652f796969322d7469657265642d6361636865)](https://packagist.org/packages/beeline/yii2-tiered-cache)[![Packagist License](https://camo.githubusercontent.com/f3a90e7b4516ba1b184d94df3c00ba9c17ef98d85ead5ce1c4a446d8deef855e/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f6265656c696e652f796969322d7469657265642d6361636865)](https://packagist.org/packages/beeline/yii2-tiered-cache)[![Packagist Downloads](https://camo.githubusercontent.com/473feaff7e802ddaf58438cf0998761d47a4559b40884cffb916244c39ff0ed0/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6265656c696e652f796969322d7469657265642d6361636865)](https://packagist.org/packages/beeline/yii2-tiered-cache)

Многоуровневый компонент кеширования для Yii2 с защитой через circuit breaker и автоматическим переключением слоев.

Возможности
-----------

[](#возможности)

- **Многоуровневая архитектура кеша**: Несколько слоев кеша (L1, L2, L3, ...) с автоматическим переключением при отказах
- **Защита через circuit breaker**: Каждый слой защищен circuit breaker для предотвращения каскадных сбоев
- **Гибкие стратегии записи**: Сквозная запись (во все слои) или запись в первый слой
- **Интеллектуальное восстановление**: Автоматическое заполнение слоев после восстановления
- **Управление TTL**: Переопределение TTL для каждого слоя для оптимального использования ресурсов
- **Поддержка зависимостей Yii2**: Полная поддержка TagDependency и других механизмов зависимостей Yii2
- **Обратная совместимость**: Режим авто-обертки для бесшовной миграции со стандартного кеша Yii2

Установка
---------

[](#установка)

```
composer require beeline/yii2-tiered-cache
```

Требования
----------

[](#требования)

- PHP 8.4 или выше
- Yii2 2.0.45 или выше (для совместимости с PHP 8.x)

Базовое использование
---------------------

[](#базовое-использование)

### Конфигурация

[](#конфигурация)

```
'cache' => [
    'class' => \Beeline\TieredCache\Cache\TieredCache::class,
    'layers' => [
        [
            'cache' => ['class' => \yii\caching\ApcCache::class, 'useApcu' => true],
            'ttl' => 300,  // 5 минут для L1
        ],
        [
            'cache' => ['class' => \yii\caching\RedisCache::class, 'redis' => 'redis'],
        ],
        [
            'cache' => ['class' => \yii\caching\DbCache::class, 'db' => 'db'],
        ],
    ],
],
```

### Стандартные операции с кешем

[](#стандартные-операции-с-кешем)

```
// Установить значение
Yii::$app->cache->set('key', 'value', 3600);

// Получить значение
$value = Yii::$app->cache->get('key');

// Удалить значение
Yii::$app->cache->delete('key');

// Очистить все слои
Yii::$app->cache->flush();
```

### Использование с TagDependency

[](#использование-с-tagdependency)

```
use yii\caching\TagDependency;

// Установить с зависимостью
Yii::$app->cache->set('user:123', $userData, 3600,
    new TagDependency(['tags' => ['user-cache', 'user-123']])
);

// Инвалидировать по тегу
TagDependency::invalidate(Yii::$app->cache, 'user-cache');
```

Параметры конфигурации
----------------------

[](#параметры-конфигурации)

### Стратегии записи

[](#стратегии-записи)

**WRITE\_THROUGH** (по умолчанию) - Запись во все доступные слои:

```
'writeStrategy' => \Beeline\TieredCache\Cache\TieredCache::WRITE_THROUGH,
```

**WRITE\_FIRST** - Запись только в первый доступный слой:

```
'writeStrategy' => \Beeline\TieredCache\Cache\TieredCache::WRITE_FIRST,
```

### Стратегии восстановления

[](#стратегии-восстановления)

**RECOVERY\_POPULATE** (по умолчанию) - Активное заполнение восстановленных слоев:

```
'recoveryStrategy' => \Beeline\TieredCache\Cache\TieredCache::RECOVERY_POPULATE,
```

**RECOVERY\_NATURAL** - Естественное заполнение слоев:

```
'recoveryStrategy' => \Beeline\TieredCache\Cache\TieredCache::RECOVERY_NATURAL,
```

### Конфигурация Circuit Breaker

[](#конфигурация-circuit-breaker)

```
'layers' => [
    [
        'cache' => ['class' => \yii\caching\RedisCache::class, 'redis' => 'redis'],
        'circuitBreaker' => [
            'failureThreshold' => 0.5,    // Открыть при 50% отказов
            'windowSize' => 10,            // Отслеживать последние 10 запросов
            'timeout' => 30,               // Повторить попытку через 30 секунд
            'successThreshold' => 1,       // Закрыть после 1 успеха
        ],
    ],
],
```

### Переопределение TTL для слоя

[](#переопределение-ttl-для-слоя)

```
'layers' => [
    [
        'cache' => ['class' => \yii\caching\ApcCache::class, 'useApcu' => true],
        'ttl' => 300,  // Переопределение: максимум 5 минут для этого слоя
    ],
],
```

Продвинутое использование
-------------------------

[](#продвинутое-использование)

### Собственный Circuit Breaker

[](#собственный-circuit-breaker)

```
'defaultBreakerClass' => \Beeline\TieredCache\Resilience\CircuitBreaker::class,
```

### Строгий режим

[](#строгий-режим)

Отклонение необернутых значений для согласованности формата данных:

```
'strictMode' => true,
```

### Мониторинг состояния слоев

[](#мониторинг-состояния-слоев)

```
$status = Yii::$app->cache->getLayerStatus();

foreach ($status as $layer) {
    echo "Слой {$layer['index']}: {$layer['class']}\n";
    echo "Состояние: {$layer['state']}\n";  // closed, open, half_open
    echo "Отказы: {$layer['stats']['failures']}\n";
}
```

### Ручное управление Circuit Breaker

[](#ручное-управление-circuit-breaker)

```
// Принудительно отключить слой (тестирование/обслуживание)
Yii::$app->cache->forceLayerOpen(1);

// Принудительно включить слой
Yii::$app->cache->forceLayerClose(1);

// Сбросить все circuit breaker
Yii::$app->cache->resetCircuitBreakers();
```

Архитектура
-----------

[](#архитектура)

### Принцип работы

[](#принцип-работы)

**Операции чтения (get)**:

1. Проверка доступности первого слоя (circuit breaker)
2. Попытка чтения из первого доступного слоя
3. При успехе: опционально заполнить верхние слои (RECOVERY\_POPULATE)
4. При отказе: попытка следующего слоя
5. Запись результата в circuit breaker

**Операции записи (set)**:

- **WRITE\_THROUGH**: Запись во все доступные слои
- **WRITE\_FIRST**: Запись только в первый доступный слой

**Операции удаления**:

- Всегда удаление из всех слоев (независимо от стратегии записи)

### Состояния Circuit Breaker

[](#состояния-circuit-breaker)

**CLOSED**: Нормальная работа, запросы проходят

**OPEN**: Слишком много отказов, запросы блокируются

**HALF\_OPEN**: Тестирование восстановления, ограниченное количество запросов

### Отказоустойчивость

[](#отказоустойчивость)

При отказе слоя кеша:

1. Circuit breaker фиксирует отказ
2. После N отказов circuit открывается (слой пропускается)
3. Запросы автоматически направляются к следующему доступному слою
4. После таймаута circuit переходит в состояние HALF\_OPEN
5. Успешный запрос закрывает circuit (слой восстановлен)

Преимущества
------------

[](#преимущества)

- **Высокая доступность**: Автоматическое переключение предотвращает недоступность кеша
- **Производительность**: Нет ожидания таймаутов при известных отказах
- **Плавная деградация**: Система работает даже при отказе слоев кеша
- **Быстрое восстановление**: Автоматическое обнаружение и восстановление отказавших слоев
- **Оптимизация ресурсов**: TTL для каждого слоя для эффективного использования памяти

Тестирование
------------

[](#тестирование)

```
# Установка зависимостей
composer install

# Запуск тестов
vendor/bin/phpunit
```

Лицензия
--------

[](#лицензия)

GNU Lesser General Public License 3.0

Ссылки
------

[](#ссылки)

- [GitHub Repository](https://github.com/beeline/yii2-tiered-cache)
- [Issue Tracker](https://github.com/beeline/yii2-tiered-cache/issues)
- [Yii2 Framework](https://www.yiiframework.com/)

###  Health Score

36

—

LowBetter than 82% of packages

Maintenance71

Regular maintenance activity

Popularity0

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity58

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

7

Last Release

185d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/76ddc43524bb32eb36568e25b6ae283bc25bb51a4572789997909092145af0f5?d=identicon)[pozitronik](/maintainers/pozitronik)

---

Top Contributors

[![pozitronik](https://avatars.githubusercontent.com/u/2357892?v=4)](https://github.com/pozitronik "pozitronik (26 commits)")

---

Tags

cacheyii2multi-tiercircuit breakerresiliencefailovertiered-cache

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/beeline-yii2-tiered-cache/health.svg)

```
[![Health](https://phpackages.com/badges/beeline-yii2-tiered-cache/health.svg)](https://phpackages.com/packages/beeline-yii2-tiered-cache)
```

###  Alternatives

[devgroup/yii2-tag-dependency-helper

Helper for unifying cache tag names with invalidation support in yii2

34507.4k7](/packages/devgroup-yii2-tag-dependency-helper)[undefinedor/yii2-cached-active-record

The cached activeRecord for the Yii2 framework

102.6k](/packages/undefinedor-yii2-cached-active-record)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
