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