yiisoft/yii2-redis
Yii2 Redis extension providing Redis-backed cache, mutex, and session handlers plus an ActiveRecord layer for storing and querying structured data in Redis. Requires Redis 2.6.12+ and PHP 7.4+ (best on PHP 8).
Cache, Session, ActiveRecord, Mutex) aligns with Laravel’s service container and dependency injection patterns, but requires Yii2-specific adapters (e.g., yii\redis\Cache → Laravel’s Redis facade).predis/predis package. This reduces vendor lock-in for Redis operations.FileCache/ArrayCache with Redis via yii\redis\Cache (adapted for Laravel’s Cache contract).FileSessionHandler with yii\redis\Session (adapted for Laravel’s Session contract).ActiveRecord implementation. Workaround: Use Redis for secondary data storage (e.g., caching model instances, query results).yii\redis\*) are Yii2-specific. Mitigation: Create Laravel-compatible wrappers (e.g., LaravelRedisCache extending yii\redis\Cache).predis/predis may use v2.x. Mitigation: Pin Predis version in composer.json or use Laravel’s built-in redis package.ActiveRecord lacks SQL-like queries (where(), orderBy()). Mitigation: Use Redis as a key-value store for serialized data (e.g., JSON-encoded Eloquent models).redis package (uses phpredis) or Predis for advanced features (e.g., clustering)?FileCache or database sessions)?| Laravel Component | Yii2-Redis Equivalent | Integration Strategy |
|---|---|---|
Cache (File/Array) |
yii\redis\Cache |
Create a Laravel Cache driver wrapping yii\redis\Cache with Predis. |
Session (File/Database) |
yii\redis\Session |
Extend Laravel’s Session to use yii\redis\Session with Predis connection. |
| Eloquent (Database) | yii\redis\ActiveRecord |
Not recommended. Use Redis for cached queries or secondary storage (e.g., cache()->remember()). |
| Queue Jobs | yii\redis\Mutex |
Adapt Mutex for Laravel’s Semaphore or use Redis transactions. |
| Rate Limiting | Redis TTL + Hashes | Leverage Redis’ native INCR/EXPIRE for rate limiting (e.g., redis->incr('key')). |
Phase 1: Caching
config/cache.php with a custom Redis driver:
'redis' => [
'driver' => 'yiiredis',
'connection' => 'default',
],
Illuminate\Contracts\Cache\Store interface for yii\redis\Cache.Cache::remember() and Cache::forever().Phase 2: Sessions
config/session.php driver to yiiredis:
'driver' => 'yiiredis',
'connection' => 'redis',
Illuminate\Session\Store to delegate to yii\redis\Session.Phase 3: Advanced Use Cases
redis->set('lock', 1, 'EX', 60, 'NX')).cache()->put('model:1', $model, now()->addHours(1)).predis/predis version aligns with Yii2-Redis (v1.x). Use Laravel’s redis package if sticking to phpredis.Cache/Session contracts (e.g., Illuminate\Contracts\Cache\Repository).PredisConnection. Configure in Laravel’s config/redis.php:
'clusters' => [
'default' => [
'scheme' => 'tcp',
'host' => ['redis1', 'redis2', 'redis3'],
'port' => 6379,
],
],
FileCache).redis-cli FLUSHALL) and verify graceful degradation.yiisoft/yii2-redis and predis/predis versions in composer.json to avoid breaking changes.config/redis.php and config/cache.php to avoid hardcoded values.REDIS_PASSWORD).Predis\Client::rawCommand() for debugging.Yii::$app->redis->rawCommand('KEYS *'); // List all keys (use sparingly in production).
redis-cli for monitoring.PredisConnection) supports multi-node setups.redis-cli --bigkeys). Set maxmemory-policy in Redis config.tcp vs. unix socket connections.| Failure Scenario | Impact | Mitigation |
|---|---|---|
| Redis Server Down | Cache/session loss | Fallback to FileCache or database sessions. |
| Network Partition | Stale data in distributed caches | Use Cache::lock() for critical sections. |
| Predis/PHP Bug | Silent failures | Implement retry logic (e.g., Predis\Retry). |
| Memory Exhaustion | Redis evictions | Configure maxmemory and maxmemory-policy (e.g., allkeys-lru). |
| Data Corruption | Inconsistent sessions/caches | Regularly back up Redis (redis-cli --rdb). |
How can I help you explore Laravel packages today?