Laravel 5.5作为缓存驱动程序的Memcached问题

时间:2018-04-29 22:00:09

标签: php laravel caching memcached

我整天都在摸不着头脑,在网上寻求任何帮助,但我还没找到,所以这就是我的问题:

我有一个使用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,
            ],
        ],
    ],

0 个答案:

没有答案