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).
Installation:
composer require yiisoft/yii2-redis
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',
],
],
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');
user:123:profile) to avoid collisions.Yii::$app->cache->set('key', $data, 3600);
Yii::$app->cache->delete('user:123:profile');
Yii::$app->session->set('cart', ['item1', 'item2']);
setFlash() for one-time notifications.
Yii::$app->session->setFlash('success', 'Item added!');
class User extends \yii\redis\ActiveRecord {
public function attributes() {
return ['id', 'name', 'email'];
}
}
// 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();
'redis' => [
'class' => 'yii\redis\predis\PredisConnection',
'parameters' => ['tcp://redis-node-1:6379', 'tcp://redis-node-2:6379'],
],
Yii::$app->cache->redis->hset('user:123', 'preferences', ['theme' => 'dark']);
Connection Issues:
redis-cli ping).Yii::$app->redis->ping() (returns true if connected).Key Expiry:
Yii::$app->cache->delete() to clean up stale data.Predis vs. Native:
PredisConnection) supports clustering but lacks some component features (e.g., Mutex).Connection is preferred for full feature support.'options' => [
'logger' => function() {
return new \Monolog\Logger('redis', [new \Monolog\Handler\StreamHandler('php://stdout')]);
},
],
redis-cli info memory.$pipeline = Yii::$app->cache->redis->pipeline();
$pipeline->set('key1', 'value1');
$pipeline->set('key2', 'value2');
$pipeline->execute();
Yii::$app->cache->set('key', gzcompress($data), 3600);
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);
}
}
}
$pubsub = Yii::$app->cache->redis->pubsub();
$pubsub->subscribe(['channel:updates']);
How can I help you explore Laravel packages today?