【发布时间】:2021-12-05 02:05:20
【问题描述】:
(Laravel 8,PHP 8)
嗨。我在 PHP APC 缓存中有一堆数据,我可以使用 apcu 命令在我的 Laravel 应用程序中访问这些数据。
我决定我应该启动一个异步作业来在会话期间为用户处理一些数据并将结果放入数据库中。 所以我制作了一个中间件,当用户访问页面时(正确地)触发,并(正确地)调度一个名为“MemoryProvider”的作业。 调度命令会立即实例化 MemoryProvider 类,运行其构造函数,然后将作业排队等待执行。 大约一秒钟后,队列被处理并运行 MemoryProvider 中的 handle 方法。
我在中间件以及 MemoryProvider 构造函数及其句柄方法中使用“apcu_cache_info()”和“apcu_exists()”检查 php 缓存的内容。
问题:
- 我的 Laravel 应用程序中似乎填充了 PHP 缓存。
- PHP 缓存显示在中间件中。
- PHP 缓存显示在作业的构造函数中。
- PHP 缓存在作业的句柄方法中显示为 EMPTY。
这是中间件:
{
$a = apcu_cache_info(); // 250,000 entries
$b = apcu_exists('the:2:0'); // true
MemoryProvider::dispatch($request);
return $next($request);
}
这是作业的 (MemoryProvider) 构造函数:
{
$this->request = $request->all();
$a = apcu_cache_info(); // 250,000 entries
$b = apcu_exists('the:2:0'); // true
}
这里是作业的(MemoryProvider)句柄方法:
{
$a = apcu_cache_info(); // 0 entries
$b = apcu_exists('the:2:0'); // false
}
问题:这是一个 PHP 限制还是一个糟糕的 Laravel 问题?以及如何在异步类中访问我的 PHP 缓存的内容?
附言我在 php.ini 中有 apc.enable_cli=1
【问题讨论】:
-
APCu 的 enable_cli 标志默认情况下似乎为 false,并且队列运行器是 CLI 应用程序也许这就是原因
-
谢谢apokryfos!我忘了提到我有它。我已经更新了问题。
标签: php laravel asynchronous queue apcu