我整天都在摸不着头脑,在网上寻求任何帮助,但我还没找到,所以这就是我的问题:
我有一个使用Laravel 5.5的现有Web应用程序,我想使用Memcached设置缓存。我会使用Redis,但由于Laravel不允许将Redis用作广播驱动程序和缓存驱动程序,因此我坚持使用Memcached。我已经创建了一个新的Laravel项目来测试缓存,然后将其实现到我现有的项目中。 所以这就是我遇到的问题......
我可以将数据存储在缓存中,并立即在同一请求上调用Cache::get('mykey');
并返回数据。如果我评论Cache::put('mykey', $myData, 10);
然后刷新页面,则没有数据!我一遍又一遍地检查配置,但我没有看到任何错误。 我应该指出的一点:如果我运行composer dumpautoload -o
,那么缓存会显示一些请求的数据,然后返回null,因为它有99%的先前尝试。这是我测试的方式。
// This queries the database MOST of the time
$value = Cache::rememberForever('users', function() {
\Log::info('database query');
return Todo::all();
});
// This almost always returns null
Cache::put('todos', Todo::all(), 10);
$todos = (Cache::has('todos') ? Cache::get('todos') : null);
// Oddly, this will return true a few times also
$isAdded = Cache::add('todos', Todo::all(), 10);
if($isAdded)
\Log::info('Added to cache');
我已经验证我的memcached PHP扩展已正确安装并且它正在侦听端口11211,所以我相信它可能是Laravel配置。我正在使用sasl身份验证,但我已禁用该功能,但没有任何区别。 任何帮助将不胜感激!
更新
'memcached' => [
'driver' => 'memcached',
'persistent_id' => env('MEMCACHED_PERSISTENT_ID'),
'sasl' => [
env('MEMCACHED_USERNAME'),
env('MEMCACHED_PASSWORD'),
],
'options' => [
// Memcached::OPT_CONNECT_TIMEOUT => 2000,
],
'servers' => [
[
'host' => env('MEMCACHED_HOST', '127.0.0.1'),
'port' => env('MEMCACHED_PORT', 11211),
'weight' => 100,
],
],
],