Redis在应该设置密钥的时候删除密钥



嘿,我在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

这里有几件事要看:

  1. .env文件的CACHE_DRIVER设置为file,因此缓存系统使用的是文件系统,而不是redis。

  2. 如果将CACHE_DRIVER更改为redis,则没有设置REDIS_CACHE_DBenv变量,因此缓存系统将使用redis数据库1进行缓存。在尝试从redis-cli查看密钥时,您需要确保选择数据库1(有关详细信息,请参阅此答案(。

  3. 您看到的redis命令是会话的垃圾收集,这些会话被设置为使用redis和数据库0。StartSession中间件内置了一个抽奖系统,因此在向应用程序发出的每一个请求中,它都会随机触发垃圾收集来清理过期的会话。

最新更新