2010-05-23 53 views
7

我一开始考虑使用memcached来存储会话而不是mySQL,这似乎是个好主意。memcached会话的方法

说到利用memcached服务器的故障切换部分,有点担心如果memcached会脱机,会话将停止工作。这肯定会影响我的用户。

我们已经使用一些技术来减少故障转移,包括在停机时间可用的服务器池进行补偿,在服务器池中使用分片/一致性散列等等。我们还会做一些优雅的降级,告诉用户出现了问题,并且如果由于memcached服务器故障转移而被踢出,欢迎他们再次登录。

那么在将会话存储在memcached服务器上时,人们通常会如何处理这些问题?

回答

3

您可以通过使用db和memcached来创建一个自动防故障方法。检查你的memcached对象是否在内存中,否则在数据库中存储会话,然后创建memcache实例。只要确保在注销/登出,它刷新/删除memcached的...

所以首先检查memcached的,如果失败,请检查DB ... :)

+0

聪明!多一点代码,但更好的性能。我喜欢! – Industrial 2010-05-23 09:27:13

9

首先,如果你只在memcache中放入某些东西,你应该可以丢失它。对于其他任何东西,都有持久存储。

其次,memcached根本不会经常失败。没有像磁盘盘片这样的移动部件。我失去了会话的唯一时间是由于内核升级的重启。但由于第一点,失去这些会议并不是什么大问题。

因此,要直接回答您的问题,如果某个数据可以丢失,只将其存储在memcache会话中即可。如果丢失不好,将其存储在永久存储器中,并可能将其缓存在内存缓存中以提高速度。

3

任何考虑此事的人都应该阅读Dormando's session post。它有你想要的所有细节。

+0

嗨!伟大的链接! – Industrial 2010-05-23 09:26:15

+0

404现在,请如果你有任何更新 – Sekai 2014-05-23 22:46:55