在多个站点上对laravel使用memcached

时间:2018-12-30 09:03:46

标签: laravel memcached

在服务器上,我大约有25个网站运行相同的基于laravel的网站。我想将会话和缓存驱动程序从文件更改为memcached。但这会导致缓存的数据混淆。例如我在站点2上看到站点1的菜单。

如何在多个站点上使用内存缓存?

3 个答案:

答案 0 :(得分:0)

我认为这样做的唯一可能方法是为每个网站设置唯一的缓存键。

它可以基于唯一的网站标识符(id或url)。 我认为检索缓存键的逻辑也可以封装一些。在我当前的设置中,我有一些相似之处,根据地区的不同,缓存键也有所不同。

protected function getCacheKey($key, $locale = null)
{
    $prefix = '__app_cache_';
    $suffix = $locale ? "_$locale" : '';

    return $prefix . $key . $suffix;
}

例如,您的逻辑可能是这样的:

protected function getCacheKey($key, Website $website)
{
    $prefix = '__app_cache_';
    $suffix = "_{$website->id}" : '';

    return $prefix . $key . $suffix;
}

,然后获取menu缓存键,您将执行以下操作:

$cache->getCacheKey($menu, $website); 

显然,这只是一个示例,需要根据您的特定需求进行调整。

答案 1 :(得分:0)

基于前缀的想法,我找到了一个更好的Laravel解决方案。但是不知何故我无法在互联网上找到它。

在cache.php文件中,我添加了一个额外的键选项以及memcached前​​缀选项,该选项在memcached文档中可用:

'memcached' => [
    'driver'  => 'memcached',
    'servers' => [
        [
            'host' => '127.0.0.1', 'port' => 11211, 'weight' => 100
        ],
    ],
    'options' => [
        Memcached::OPT_PREFIX_KEY => "websitename",
    ],
],

现在所有站点都可以正常运行

答案 2 :(得分:0)

兄弟,如果您还没有在Laravel上使用Memcached,那么我更愿意与Redis一起使用,它在使用Laravel时更容易操作。