首页 > 解决方案 > Laravel 5.5 作为缓存驱动程序的 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,
            ],
        ],
    ],

标签: phplaravelcachingmemcached

解决方案


推荐阅读