【发布时间】:2018-12-30 09:03:45
【问题描述】:
在服务器上,我有大约 25 个网站运行相同的基于 laravel 的支持。我想将会话和缓存驱动程序从文件更改为 memcached。但这会导致缓存数据混淆。例如我在站点 2 上看到站点 1 的菜单。
如何在多个站点上使用 memcached?
【问题讨论】:
在服务器上,我有大约 25 个网站运行相同的基于 laravel 的支持。我想将会话和缓存驱动程序从文件更改为 memcached。但这会导致缓存数据混淆。例如我在站点 2 上看到站点 1 的菜单。
如何在多个站点上使用 memcached?
【问题讨论】:
我认为唯一可行的方法是为每个网站设置唯一的缓存键。
它可以基于唯一的网站标识符(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);
显然,这只是一个示例,需要根据您的具体需求进行调整。
【讨论】:
基于前缀的想法,我为 Laravel 找到了一个更好的解决方案。但不知何故,我在互联网上找不到这个。
在 cache.php 文件中,我添加了一个带有 memcached 前缀选项的额外键选项,该选项可在 memcached 文档中找到:
'memcached' => [
'driver' => 'memcached',
'servers' => [
[
'host' => '127.0.0.1', 'port' => 11211, 'weight' => 100
],
],
'options' => [
Memcached::OPT_PREFIX_KEY => "websitename",
],
],
现在所有网站都可以正常运行
【讨论】:
兄弟,如果你没有在 Laravel 中使用过 Memcached,那么我更喜欢使用 Redis,它在使用 Laravel 时速度更快。
【讨论】: