嘿,我在Laravel API中有以下代码:
if (Hash::check($token_query, $hashed_token))
{
Auth::loginUsingId($key->id);
$getSessionID = session()->getId($key->id);
$cookie = cookie('session', $getSessionID, 15);
self::updateIntoDatabase('users', 'identifier', $identifier_query, 'active_session', $getSessionID);
Cache::put('Session_Token: ' . $getSessionID, true,900);
return response(["status" => 200, "message" => "Logged in", "loginUsingId:" => Auth::user()], 200)->withCookie($cookie);
}
发送此请求后使用keys *
时,不会显示任何内容。但是,使用monitor
会输出以下内容:
1646681598.414829 [0 172.21.0.4:60140] "SELECT" "0"
1646681598.415269 [0 172.21.0.4:60140] "DEL" "laravel_database_laravel_cache:9C5AGmh99tVzG9Sc0OTWygfh1pXvFEnCg1Ckr4nB"
它似乎选择了第0个数据库——这是正确的——然后删除密钥?
这是我的配置/数据库.php:
'redis' => [
'client' => env('REDIS_CLIENT', 'phpredis'),
'options' => [
'cluster' => env('REDIS_CLUSTER', 'redis'),
'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),
],
'default' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_DB', '0'),
],
'cache' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', 'laravel'),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_CACHE_DB', '1'),
],
],
我的配置/缓存.php:
'redis' => [
'driver' => 'redis',
'connection' => 'cache',
'lock_connection' => 'default',
],
我的.env:
BROADCAST_DRIVER=log
CACHE_DRIVER=file
FILESYSTEM_DRIVER=local
QUEUE_CONNECTION=redis
SESSION_DRIVER=redis
SESSION_LIFETIME=120
MEMCACHED_HOST=127.0.0.1
REDIS_HOST=redis
REDIS_PASSWORD=laravel
REDIS_PORT=6379
这里有几件事要看:
-
.env
文件的CACHE_DRIVER
设置为file
,因此缓存系统使用的是文件系统,而不是redis。 -
如果将
CACHE_DRIVER
更改为redis,则没有设置REDIS_CACHE_DB
env变量,因此缓存系统将使用redis数据库1进行缓存。在尝试从redis-cli查看密钥时,您需要确保选择数据库1(有关详细信息,请参阅此答案(。 -
您看到的redis命令是会话的垃圾收集,这些会话被设置为使用redis和数据库0。
StartSession
中间件内置了一个抽奖系统,因此在向应用程序发出的每一个请求中,它都会随机触发垃圾收集来清理过期的会话。