【问题标题】:Use memcached for laravel on multiple sites在多个站点上为 laravel 使用 memcached
【发布时间】:2018-12-30 09:03:45
【问题描述】:

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

如何在多个站点上使用 memcached?

【问题讨论】:

    标签: laravel memcached


    【解决方案1】:

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

    它可以基于唯一的网站标识符(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); 
    

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

    【讨论】:

      【解决方案2】:

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

      在 cache.php 文件中,我添加了一个带有 memcached 前缀选项的额外键选项,该选项可在 memcached 文档中找到:

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

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

      【讨论】:

        【解决方案3】:

        兄弟,如果你没有在 Laravel 中使用过 Memcached,那么我更喜欢使用 Redis,它在使用 Laravel 时速度更快。

        【讨论】:

        • @Patrick 您也可以将其与基于密钥模式的多个密钥一起使用,例如域名和密钥以及唯一 ID,somedomain_key_uniqueID。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-08-20
        • 2018-06-28
        • 1970-01-01
        • 1970-01-01
        • 2017-05-22
        • 2014-11-09
        • 1970-01-01
        相关资源
        最近更新 更多