我的网站在没有memcached的共享主机中运行。 那么,如同像memcached一样将MySQL内存数据库作为对象缓存呢?
答案 0 :(得分:14)
我想说如果你运营一个需要memcached的网站,你就不应该在共享主机上运行它。
这是我轻率的回答。这是一个真正的答案:
与MEMORY存储引擎相比,Memcached具有一些优势。
作为缓存解决方案,我不会选择MySQL MEMORY存储引擎。由于您使用的是PHP,因此您应该使用APC或Xcache等。它们具有数据缓存功能,这些功能更适合PHP中的典型用法。
如果您没有使用这些PHP缓存技术,那么这是一个比担心memcached与MEMORY存储引擎相关的更重要的改进领域。
答案 1 :(得分:1)
我同意Bill的意见,你不会以这种方式使用MySQL获得相同的性能提升。
可以想像:
确保您的主机已启用内存存储引擎。
SHOW ENGINES;
这将显示mysql实例中安装的所有存储引擎的列表和状态。
Memcache允许您存储任何长度的数据。在内部,它检查您的数据以查看它的长度,并将其放入预先分配的内存桶中,该内存桶最接近您存储的项目的大小。那部分逻辑,你需要自己实现。 MySQL的内存存储引擎只接受固定长度的行。要在mysql中获得类似的效果,您需要在内存表中创建多个具有不同长度的char字段以存储数据。 http://dev.mysql.com/doc/refman/5.0/en/memory-storage-engine.html
选择所有“桶”之间具有联合的表将产生正确的值,无论密钥实际存储在哪个表中。
如果你将数据存储在一个比字段长的字段(例如16个char字段中的18个字符)中,那么mysql将使用mysql进行存储,mysql将截断它而不会出现任何错误。
这是一个更好的主意:将Zend_Cache与'file'后端一起使用。 这将在webservers本地磁盘上存储像memcache一样的东西。 连接到共享主机中的数据库通常很昂贵。 (对于我的godaddy帐户的第一次连接,1到2秒。)即使是慢速磁盘也比这快。 http://framework.zend.com/manual/en/zend.cache.html