我当时正在考虑使用memcached来存储会话而不是mySQL,这似乎是一个好主意。
当涉及到使用memcached服务器的故障转移部分时,如果memcached将脱机,我的会话将停止工作有点令人担忧。它肯定会影响我的用户。
我们已经使用了一些技术来减少故障转移,包括在停机时使用可用于补偿的服务器池,在服务器池中使用分片/一致性哈希等等。我们还会做一些优雅的降级,告诉用户出现了问题,欢迎他们再次登录,如果由于memcached服务器故障转移而被踢出。
那么在memcached服务器上存储会话时,人们通常如何处理这些问题?
答案 0 :(得分:9)
首先,如果你只在memcache中放一些东西,你应该可以丢失它。对于其他一切,都有持久存储。
其次,memcached不会经常失败。没有像磁盘盘片那样的移动部件。我失去会话的唯一一次是由于重新启动内核升级。但由于第一点,失去这些会议并不是什么大问题。
因此,要直接回答您的问题,如果数据可以丢失,只将其存储在内存缓存会话中即可。如果不能丢失,请将其存储在持久存储中,并将其缓存在内存缓存中以提高速度。
答案 1 :(得分:3)
任何考虑这一点的人都应该阅读Dormando's session post。它有你想要的所有细节。
答案 2 :(得分:3)
您可以使用db和memcached创建故障安全方法。检查你的memcached对象是否在内存中,然后在db中存储会话,然后创建memcache实例。只需确保在注销/注销时,它会刷新/删除memcached ......
首先检查memcached,如果失败,请检查db ...:)