简介
Redis在默认情况下有16中数据库,Laravel默认使用数据库0作为 缓存 和 Session 的存储。
但是这个默认有些问题,当我们执行php artisan cache:clear
清除缓存时,也会把Session
也清除了,这会让所有用户重新登录,所以最好让 缓存 和 Session 使用不同的Redis数据库。
Session驱动
- file - session数据存储在 storage/framework/sessions目录下,存储在文件中,读取太频繁,生产环境不建议使用;
- cookie - session数据存储在经过加密的安全的cookie中;存放的是信息太多,Nginx 默认配置下配合 PHP-FPM,经常报 502,不建议使用;
- database - session数据存储在数据库中, 不建议存储在数据库中,因为读取太频繁;
- array - session数据存储在简单PHP数组中,在多个请求之间是非持久化的。数组驱动通常用于运行测试以避免session数据持久化。
- memcached / redis - session数据存储在memcached/redis中;
注意:memcached 专业内存缓存服务器,可惜只支持最大 30 天的缓存时间,
综上Redis 在配置好多数据库的情况下,还是最好的 Session 存储方案。
配置
让缓存,也就是默认的 Redis 存储到 0 号数据库,Session 存储在 1 号数据库。
配置 Session Redis 数据库
修改config/database.php,在redis选项添加:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16'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', 'localhost'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 1,
],
],
指定Session使用数据库
修改 config/session.php ,把下面这一行1
'connection' => null,
改为:1
'connection' => 'session',
开始使用
修改 .env 文件的 SESSION_DRIVER 选项为 redis1
SESSION_DRIVER=redis