Laravel: comment séparer le cache et la session dans différentes bases de données redis?
je veux mettre les données de session et de cache dans redis. C'est ma configuration dans la base de données.php:
'redis' => array(
'cluster' => false,
'default' => array(
'host' => '192.168.56.101',
'port' => 6379,
'database' => 0,
),
'session' => array(
'host' => '192.168.56.101',
'port' => 6379,
'database' => 1,
),
),
session.php:
return array(
'driver' => 'redis',
'connection' => 'session',
);
cache.php:
'driver' => 'redis',
Cependant, lorsque j'écris un code comme ceci:
Cache::remember('aa',1,function(){
return 'bb';
});
le pilote de cache utilise la même base de données redis que le pilote de session, ce qui donne:
127.0.0.1:6379[1]> keys *
1) "aa"
2) "e0606244bec40b0352fb2b7b65d98049e49f6189"
Quelqu'un sait comment forcer le cache à utiliser une connexion redis spécifique? Ou je dois mélanger ensemble?
3 réponses
Introduction
voici ma note, pour un autre gars qui court à ce problème, je pense que cela devrait être dans les docs.
par défaut, redis vous donne 16 bases de données séparées, mais laravel out of the box va essayer d'utiliser la base de données 0 pour les deux sessions et le cache.
notre solution est de laisser rediscaching utiliser la base de données 0, et la base de données 1 pour la Session, là pour résoudre la session clair en exécutant php artisan cache:clear
problème.
Note: testé à Laravel 5.1
1. Mise en place de la session connexion Redis
Modifier config/database.php
, ajouter session
pour le redis
option:
'redis' => [
'cluster' => false,
'default' => [
'host' => env('REDIS_HOST', 'localhost'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
],
'session' => [
'host' => env('REDIS_HOST', 'localhost'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 1,
],
],
2. Faire usage de l' session
connexion
Modifier config/session.php
, modifiez le code suivant:
'connection' => null,
à:
'connection' => 'session',
3. Utilisation de Redis comme pilote de session
Modifier .env
, modifiez SESSION_DRIVER
:
SESSION_DRIVER=redis
4. Test
exécutez la commande artisan suivante, puis vérifiez votre état de connexion:
php artisan cache:clear
Si l'état de connexion persiste, voilà!
Laravel 5 supporte maintenant cela.
https://github.com/laravel/framework/commit/d10a840514d122fa638eb5baa24c8eae4818da3e
vous pouvez sélectionner la connexion redis en modifiant config/cache.php
'stores' => [
'redis' => [
'driver' => 'redis',
'connection' => 'your-connection-name',
],
],
Laravel 4 CacheManager
ne supporte pas la sélection de la connexion redis.
ce que vous devez faire est de modifier/étendre CacheManager
et remplacer createRedisDriver()
méthode.
Modifier cette ligne
return $this->repository(new RedisStore($redis, $this->getPrefix()));
return $this->repository(
new RedisStore($redis, $this->getPrefix(),
$this->app['config']['cache.redis'])
);
maintenant vous pouvez définir votre configuration dans le cache.php
'redis' => 'your-connection-name'
Laravel 5.5:
base de données.php devrait ressembler à ceci:
'redis' => [
'client' => 'predis',
'default' => [
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
],
'session' => [
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 1,
],
],
Et dans la session.vous devez également mettre à jour la clé "connexion" à la bonne clé. Dans ce cas, 'session'
'connection' => 'session',