Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Yii2 Redis Laravel Package

yiisoft/yii2-redis

Yii2 Redis extension providing a Redis connection plus Cache, Session, and Mutex handlers, and a Redis-backed ActiveRecord for storing and querying structured data. Requires Redis 2.6.12+ and PHP 7.4+ (best on PHP 8).

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation:

    composer require yiisoft/yii2-redis
    

    Add the extension to your config/web.php or config/console.php:

    'components' => [
        'redis' => [
            'class' => 'yiisoft\redis\Connection',
            'hostname' => '127.0.0.1',
            'port' => 6379,
            'database' => 0,
        ],
    ],
    
  2. First Use Case:

    • Caching:
      Yii::$app->redis->set('key', 'value');
      $value = Yii::$app->redis->get('key');
      
    • Session Storage: Configure session component to use Redis:
      'components' => [
          'session' => [
              'class' => 'yii\web\Session',
              'cookieMode' => 'none',
              'savePath' => Yii::$app->redis,
          ],
      ],
      
  3. Documentation:


Implementation Patterns

Common Workflows

Caching Strategies

  • Short-lived Caching:
    Yii::$app->redis->setex('temp_key', 3600, 'data'); // Expires in 1 hour
    
  • Cache Invalidation:
    Yii::$app->redis->del('key'); // Manual invalidation
    Yii::$app->redis->expire('key', 0); // Force expiration
    

Session Management

  • Session Data Access:
    Yii::$app->session->set('user_id', 123);
    $userId = Yii::$app->session->get('user_id');
    
  • Session Timeout: Configure in config/web.php:
    'session' => [
        'timeout' => 1800, // 30 minutes
    ],
    

ActiveRecord Integration

  • Cache Queries:
    $model = User::findOne(1);
    Yii::$app->redis->set('user:1', serialize($model), 3600); // Cache for 1 hour
    
  • Cache Tags:
    Yii::$app->redis->set('user:1', serialize($model), 3600);
    Yii::$app->redis->sadd('user:tags', 'user:1'); // Add to tag set
    Yii::$app->redis->delByTag('user:tags'); // Invalidate all tagged keys
    

Integration Tips

  • Queue Jobs: Use Redis for job queues (e.g., yiisoft/yii2-queue).
  • Rate Limiting:
    $key = 'rate_limit:user:' . $userId;
    if (Yii::$app->redis->incr($key) > 100) {
        throw new \yii\web\TooManyRequestsHttpException();
    }
    Yii::$app->redis->expire($key, 60); // Reset after 60 seconds
    
  • Pub/Sub:
    Yii::$app->redis->publish('channel', 'message');
    Yii::$app->redis->subscribe(['channel'], function ($message) {
        // Handle message
    });
    

Gotchas and Tips

Pitfalls

  • Connection Issues:
    • Ensure Redis server is running (redis-cli ping).
    • Handle connection failures gracefully:
      try {
          Yii::$app->redis->connect();
      } catch (\RedisException $e) {
          Yii::$app->errorHandler->logException($e);
          // Fallback to file cache or throw an error
      }
      
  • Serialization:
    • Avoid serializing complex objects (e.g., closures, resources). Use JSON for simplicity:
      Yii::$app->redis->set('key', json_encode($data));
      $data = json_decode(Yii::$app->redis->get('key'), true);
      
  • Memory Management:
    • Monitor Redis memory usage (redis-cli info memory). Use maxmemory-policy in Redis config to avoid evictions.
    • Prefer short TTLs for non-critical data.

Debugging

  • Redis CLI: Use redis-cli to inspect keys:
    redis-cli keys *  # List all keys (use cautiously in production)
    redis-cli get key
    redis-cli ttl key
    
  • Logging: Enable Redis logging in config/web.php:
    'redis' => [
        'class' => 'yiisoft\redis\Connection',
        'log' => true, // Enable logging
    ],
    
  • Common Errors:
    • RedisException: Check connection settings and Redis server status.
    • InvalidArgumentException: Ensure keys are strings and values are serializable.

Configuration Quirks

  • Multiple Redis Instances: Configure multiple connections:
    'components' => [
        'redisCache' => [
            'class' => 'yiisoft\redis\Cache',
            'redis' => ['hostname' => '127.0.0.1', 'port' => 6379],
        ],
        'redisSession' => [
            'class' => 'yiisoft\redis\Session',
            'redis' => ['hostname' => '127.0.0.1', 'port' => 6380],
        ],
    ],
    
  • Password Protection: Add password to Redis config if required:
    'redis' => [
        'password' => 'your_password',
    ],
    

Extension Points

  • Custom Commands: Extend the connection with custom methods:
    class CustomRedis extends \yiisoft\redis\Connection {
        public function hsetnx($key, $field, $value) {
            return $this->executeCommand('HSETNX', [$key, $field, $value]);
        }
    }
    
    Then bind it in config:
    'redis' => ['class' => 'app\components\CustomRedis'],
    
  • Event Handling: Use Redis pub/sub for real-time updates:
    Yii::$app->redis->subscribe(['events'], function ($message) {
        Yii::$app->trigger('event', new \yii\base\Event(['data' => $message]));
    });
    
  • Cluster Support: For Redis Cluster, use Predis or phpredis with a custom connection class:
    'redis' => [
        'class' => 'Predis\Client',
        'parameters' => [
            'scheme' => 'tcp',
            'host' => '127.0.0.1',
            'port' => 6379,
            'cluster' => 'redis',
        ],
    ],
    
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
davejamesmiller/laravel-breadcrumbs
artisanry/parsedown
christhompsontldr/phpsdk
bower-asset/punycode
bower-asset/inputmask
bower-asset/jquery
bower-asset/yii2-pjax
laravel/nova
spatie/laravel-mailcoach
spatie/laravel-superseeder
laravel/liferaft
nst/json-test-suite
danielmiessler/sec-lists
jackalope/jackalope-transport
twbs/bootstrap4
php-http/client-implementation
phpcr/phpcr-implementation
cucumber/gherkin-monorepo
haydenpierce/class-finder
psr/simple-cache-implementation