Won*_*and 5 php memcached zend-framework magento
我实际上是想了解为什么memcached不存储给定ID的数据。
我正在使用基于Zend Framework 1.11.1的Magento EE 1.11.2.0。用于处理memcached的接口是Zend_Cache_Backend_Memcached
现在这里没有这么大的自定义代码,这是我的自定义容器,用于保存缓存:
public function saveCache($blockContent)
{
$lifeTime = 86400 * 30 * 6;
$tags = array(
My_Module_Model_PageCache_Container_Category_Blabla::CACHE_TAG
);
$cacheId = $this->_getCacheId();
if ($cacheId !== false) {
$this->_saveCache($blockContent, $cacheId, $tags, $lifeTime);
}
return $this;
}
Run Code Online (Sandbox Code Playgroud)
我只是强迫magento使用我的自定义项cache tag和一个固定的lifetime(memcache不支持自定义标记,所以我想这不是问题)也lifetime没有在memcached中使用my ,因为我可以看到使用了默认项。
一开始我以为这个问题是由缓存ID太长引起的,但是现在减少它(<31 char)后,这对我没有帮助:
我可以看到该load()方法Zend_Cache_Backend_Memcached对于我的缓存ID总是返回false。虽然该save()方法返回true就像被缓存一样。
这是我的local.xml配置:
<cache>
<slow_backend_store_data>1</slow_backend_store_data>
<auto_refresh_fast_cache>0</auto_refresh_fast_cache>
<backend>memcached</backend>
<slow_backend>database</slow_backend>
<memcached>
<servers>
<!--<server>-->
<!--<host><![CDATA[127.0.0.1]]></host>-->
<!--<port><![CDATA[11213]]></port>-->
<!--<persistent><![CDATA[1]]></persistent>-->
<!--</server>-->
<server>
<host><![CDATA[unix:///tmp/memcached.sock]]></host>
<port><![CDATA[0]]></port>
<persistent><![CDATA[0]]></persistent>
<weight><![CDATA[2]]></weight>
<timeout><![CDATA[5]]></timeout>
</server>
</servers>
<compression><![CDATA[0]]></compression>
<hashed_directory_level><![CDATA[]]></hashed_directory_level>
<hashed_directory_umask><![CDATA[]]></hashed_directory_umask>
<file_name_prefix><![CDATA[]]></file_name_prefix>
</memcached>
</cache>
<full_page_cache>
<backend>memcached</backend>
<slow_backend>database</slow_backend>
<slow_backend_store_data><![CDATA[1]]></slow_backend_store_data>
<memcached>
<servers>
<server>
<host><![CDATA[unix:///tmp/memcached.sock]]></host>
<port><![CDATA[0]]></port>
<persistent><![CDATA[0]]></persistent>
<weight><![CDATA[2]]></weight>
<timeout><![CDATA[10]]></timeout>
<retry_interval><![CDATA[10]]></retry_interval>
<status><![CDATA[1]]></status>
<stats_update_factor><![CDATA[1]]></stats_update_factor>
</server>
</servers>
</memcached>
</full_page_cache>
Run Code Online (Sandbox Code Playgroud)
我还尝试使用以下命令检查memcached的条目,以查看是否存储了我的ID:
echo 'stats cachedump 35 35' | sudo nc -U /tmp/memcached.sock
Zend_Cache_Backend_Memcachedxdebug)这里的问题是 $lifetime 和 Zend_Cache_Backend_Memcached 中的一个相对错误。
Memcached 的最长生命周期为 30 天 (2592000),因此我使用它的限制太大,这就是数据未存储的原因。
可悲的是:
Zend_Cache_Backend_Memcached::save() 不检查限制是否正确 < 2592000
memcached 对象上的 set() 方法即使不存储数据也会返回 true $result = @$this->_memcache->set($id, array($data, time(), $lifetime), $标志,$lifetime);
| 归档时间: |
|
| 查看次数: |
2677 次 |
| 最近记录: |