使用Memcached还是MySQL作为会话存储 - PHP

7

在使用PHP时,使用Memcached作为会话存储是否是一个好主意?我们将拥有很多服务器,并且必须从任何地方访问会话数据,因此我们不得不使用数据库(在我们的情况下将是MySQL)作为会话存储或Memcached。您认为呢?

1个回答

7
我认识一些使用Memcached的人,它非常快,肯定比数据库快得多,并且被构建为处理更高的并发量。
纯内存存储的主要缺点是如果/当重启守护进程时,所有会话数据都将被清除。根据我的经验,Memcached非常稳定,我从未因故障而不得不重新启动它,但这是一个考虑因素,如果你的系统管理员不习惯以这种方式工作,或者如果你的系统经常更新。这也取决于是否可以接受每个月或每年失去所有用户会话的情况(例如,在电子商务中,管理层可能不会喜欢这种情况)。
如果是这种情况,明显的解决方案是使用基于磁盘的NoSQL/哈希表数据库之一,例如基于Memcached的MemcacheDB。或者参见:CouchDBMongoDB等。每个守护进程(包括Memcached)在性能调优方面也比MySQL复杂得多(在MySQL中,必须根据安装/使用情况调整各种内容,如键和排序缓冲区、查询缓存等)。我的意思是,对于Memcached来说,除了分配内存并启动它之外,没有什么要做的。
就个人而言,我喜欢为临时事物(如会话密钥)使用更快、更合适(非SQL)的存储方式,但如果您的数据库没有负载,并且您不预计会有负载,将会话存储在数据库中唯一失去的就是速度稍慢,因此用户会看到更多的延迟。
无论你选择哪种方式,我建议你编写会话管理代码时,将存储引擎作为一个层次结构,这样你就可以相对轻松地切换不同的存储引擎。如果你发现memcached或者其他选择不太好用,想尝试别的东西,你不希望重新编写应用程序。例如,我曾经为一个集群CMS应用程序编写了一个缓存系统,使用memcached缓存各种页面和对象,但当守护进程无法访问时,它会故障转移至备用后端,这些后端会在单个Web服务器上缓存到共享内存或磁盘中。(在你的情况下,你不一定需要自动故障转移,只需要能够更改后端即可。)
我提到MemcacheDB是因为它使用Memcache协议,所以非常容易将Memcached换成MemcacheDB或反之。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接