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 Redis connection plus Cache, Session, and Mutex handlers, and an ActiveRecord layer to store and query structured data in Redis using familiar Yii2 patterns. 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
    
  2. Basic Configuration (in config/web.php):

    'components' => [
        'redis' => [
            'class' => 'yii\redis\Connection',
            'hostname' => 'localhost',
            'port' => 6379,
            'database' => 0,
        ],
        'cache' => [
            'class' => 'yii\redis\Cache',
        ],
        'session' => [
            'class' => 'yii\redis\Session',
        ],
    ],
    
  3. First Use Case:

    // Cache a value
    Yii::$app->cache->set('key', 'value', 3600);
    
    // Retrieve a value
    $value = Yii::$app->cache->get('key');
    
    // Session usage
    Yii::$app->session->set('user_id', 123);
    $userId = Yii::$app->session->get('user_id');
    

Implementation Patterns

Cache Integration

  • Key Naming: Use consistent prefixes (e.g., user:123:profile) to avoid collisions.
  • TTL Management: Set appropriate TTLs (e.g., 3600 for 1-hour cache).
    Yii::$app->cache->set('key', $data, 3600);
    
  • Cache Invalidation: Clear keys programmatically when data changes.
    Yii::$app->cache->delete('user:123:profile');
    

Session Handling

  • Session Data: Store user-specific data (e.g., preferences, cart items).
    Yii::$app->session->set('cart', ['item1', 'item2']);
    
  • Flash Messages: Use setFlash() for one-time notifications.
    Yii::$app->session->setFlash('success', 'Item added!');
    

ActiveRecord with Redis

  • Model Definition:
    class User extends \yii\redis\ActiveRecord {
        public function attributes() {
            return ['id', 'name', 'email'];
        }
    }
    
  • CRUD Operations:
    // Create
    $user = new User();
    $user->name = 'John';
    $user->email = 'john@example.com';
    $user->save();
    
    // Read
    $user = User::find()->where(['email' => 'john@example.com'])->one();
    
    // Update
    $user->name = 'John Doe';
    $user->save();
    
    // Delete
    $user->delete();
    

Predis Connection (Advanced)

  • Cluster/Sentinel Support:
    'redis' => [
        'class' => 'yii\redis\predis\PredisConnection',
        'parameters' => ['tcp://redis-node-1:6379', 'tcp://redis-node-2:6379'],
    ],
    
  • Direct Redis Commands:
    Yii::$app->cache->redis->hset('user:123', 'preferences', ['theme' => 'dark']);
    

Gotchas and Tips

Common Pitfalls

  1. Connection Issues:

    • Ensure Redis server is running (redis-cli ping).
    • Check firewall rules if using remote Redis.
    • Debug with Yii::$app->redis->ping() (returns true if connected).
  2. Key Expiry:

    • Redis keys expire automatically, but ActiveRecord data persists until manually deleted.
    • Use Yii::$app->cache->delete() to clean up stale data.
  3. Predis vs. Native:

    • Predis (PredisConnection) supports clustering but lacks some component features (e.g., Mutex).
    • Native Connection is preferred for full feature support.

Debugging Tips

  • Log Redis Commands: Enable Predis logging in config:
    'options' => [
        'logger' => function() {
            return new \Monolog\Logger('redis', [new \Monolog\Handler\StreamHandler('php://stdout')]);
        },
    ],
    
  • Check Memory Usage: Monitor Redis memory with redis-cli info memory.

Performance Optimization

  • Pipeline Commands: Use Predis pipelines for batch operations:
    $pipeline = Yii::$app->cache->redis->pipeline();
    $pipeline->set('key1', 'value1');
    $pipeline->set('key2', 'value2');
    $pipeline->execute();
    
  • Compression: Compress large cached data:
    Yii::$app->cache->set('key', gzcompress($data), 3600);
    

Extension Points

  • Custom Cache Tags: Extend Cache to support tags:
    class TaggedCache extends \yii\redis\Cache {
        public function setWithTags($key, $value, $tags = []) {
            $this->set($key, $value);
            foreach ($tags as $tag) {
                $this->redis->sadd("tag:$tag", $key);
            }
        }
    }
    
  • Redis Pub/Sub: Use Predis for real-time updates:
    $pubsub = Yii::$app->cache->redis->pubsub();
    $pubsub->subscribe(['channel:updates']);
    
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.
hamzi/corewatch
minionfactory/raw-hydrator
hexters/coinpayment
rjcodes/rjcms
act-training/laravel-permissions-manager
alimarchal/laravel-chart-of-accounts
babenkoivan/elastic-scout-driver
mkwebdesign/filament-watchdog-v5
renatomarinho/laravel-page-speed
zedmagdy/filament-business-hours
renatovdemoura/blade-elements-ui
devgeek/beacon-admin
benjamin-rqt/data-watcher-bundle
atriumphp/atrium
sandermuller/package-boost-laravel
sandermuller/boost-skills
redaxo/core
yusufgenc/filament-api-forge
l3aro/rating-star-for-filament
leek/filament-subtenant-scope