我目前正在使用memcached和我的java应用程序,总的来说它工作得很好.
对我来说最重要的memcached的功能是:
但是,有一件事我想做,memcached无法做到.我想定期(可能每天一次)将缓存内容保存到磁盘.我希望能够从保存的磁盘映像中恢复缓存.
磁盘保存不需要非常复杂.如果在保存期间添加了新的键/值,我不在乎它是否包含在保存中.如果在保存发生时修改了现有的键/值,则保存的值应该是旧值或新值,但我不关心哪一个.
任何人都可以推荐另一种缓存解决方案(免费或商业),它具有对我很重要的所有(或很大一部分)memcached功能,并且还允许从磁盘保存和恢复整个缓存?
到目前为止,我研究了stackoverflow关于在服务器重启后使会话持久化的答案.
我考虑用我的平均应用程序有4种可能的方式.
现在我的疑问是,我是否会在mongo和redis中重启我的服务器.会话仍然在那里,因为它们是外部数据存储.但是如何使用JWT和cookie会话使我的会话持久化.这些会话变量存储在何处.
在passport.js的情况下,我遇到的解决方案是使会话持久化是将会话数据存储在connect-mongo/connect-redis中.
护照中有没有其他方法可以使会话持续存在?
在我们的Intranet应用程序中,我们使用SSO(单点登录)登录,而客户端和auth源应用程序上的会话都存储在memcached中.
会话设置为在垃圾收集器可能将其视为删除之前的12小时.两个应用程序都是使用ZF2编写的.
不幸的是,问题是,在一段时间后(我没有确切的值),浏览器会丢失导致重定向到auth origin的会话,其中会话仍处于活动状态,因此用户被重定向回客户端并且浏览器会话刷新.如果用户没有未保存的工作,这不是什么大问题,因为这两个重定向在1秒内发生,用户甚至可能没有注意到它们.
但是当用户有未保存的工作时,它确实是一个大问题,即使尝试保存它也会导致重定向,工作也就消失了.
以下是会话的配置Bootstrap.php
:
class Module
{
public function onBootstrap(MvcEvent $e)
{
// ...
$serviceManager = $e->getApplication()->getServiceManager();
$sessionManager = $serviceManager->get('session_manager_memcached');
$sessionManager->start();
Container::setDefaultManager($sessionManager);
// ...
}
public function getServiceConfig()
{
return array(
'factories' => array(
// ...
'session_manager_memcached' => function ($sm) {
$systemConfig = $sm->get('config');
$config = new SessionConfig;
$config->setOptions(array(
'phpSaveHandler' => 'memcache',
'savePath' => 'tcp://localhost:11211?timeout=1&retry_interval=15&persistent=1',
'cookie_httponly' => true,
'use_only_cookies' => true,
'cookie_lifetime' => 0,
'gc_maxlifetime' => 43200, // 12h
'remember_me_seconds' => 43200 // 12h
));
return …
Run Code Online (Sandbox Code Playgroud) memcached ×2
session ×2
caching ×1
distributed ×1
express ×1
java ×1
node.js ×1
passport.js ×1
persistence ×1
php ×1
redis ×1