在服务器上,我大约有25个网站运行相同的基于laravel的网站。我想将会话和缓存驱动程序从文件更改为memcached。但这会导致缓存的数据混淆。例如我在站点2上看到站点1的菜单。
如何在多个站点上使用内存缓存?
答案 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时更容易操作。