我有一个 SilverStripe 实例在 AWS 负载均衡器后面的两台服务器上运行。为了共享会话信息,我正在运行 Elasticache Redis 服务器。我正在设置我的 php 会话存储信息:
ini_set('session.save_handler', 'redis');
ini_set('session.save_path', 'tcp://127.0.0.1:6379');
在我登录 CMS 的管理部分后,我可以在服务器之间跳转并且它会记住我,但是在 CMS 中的部分之间切换时,主要部分不会呈现(AJAX 调用)。据我所知,另一台服务器没有意识到(无论您从第二个请求哪个服务器),您已经加载了 CMS 管理员,并且在响应标头中说要加载新版本的 JS 依赖项,然后假装管理员和它不加载。
阅读文档SilverStripe 正在使用 Zend_Cache 获取一些额外信息。我想如果我加载管理界面,然后删除缓存目录,它会复制问题。它没有。
然后我尝试使用这个模块来更改 Zend_Cache 正在使用的存储引擎。我补充说:
SS_Cache::add_backend(
'primary_redis',
'Redis',
array(
'servers' => array(
'host' => 'localhost',
'port' => 6379,
'persistent' => true,
'weight' => 1,
'timeout' => 5,
'retry_interval' => 15,
'status' => true,
'failure_callback' => null
)
)
);
SS_Cache::pick_backend('primary_redis', 'any', 10);
到我的 mysite/_config.php ,这是在 redis 中存储一些 cms 信息,例如 key CMSMain_SiteTreeHints9b258b19199db9f9ed8264009b6c351b
,但这仍然不能解决负载平衡环境中服务器之间更改的问题。
SilverStripe 还能在哪里存储缓存数据?我是否正确实现了模块?