我有一个 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 依赖项,然后将管理员和它不加载。
读入the docs https://docs.silverstripe.org/en/3/developer_guides/performance/caching/SilverStripe 使用 Zend_Cache 来获取一些额外信息。我想如果我加载管理界面,然后删除缓存目录,它会复制问题。事实并非如此。
然后我尝试使用该模块 https://github.com/andrelohmann/silverstripe-cache-backends更改 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 信息,例如密钥CMSMain_SiteTreeHints9b258b19199db9f9ed8264009b6c351b
,但是这仍然不能解决负载均衡环境中服务器之间更改的问题。
SilverStripe 还可以在哪里存储缓存数据?我是否正确实施了该模块?