ecshop缓存过多的原因及简单解决方法
经过简单测试发现,大量类似这样的语句被缓存
SELECT act_id, act_name, act_type, start_time, end_time FROM `ecs`.`ecs_goods_activity` WHERE is_finished=0 AND start_time <= '1216338055' AND end_time >= '1216338055'
SELECT act_id, act_range, act_range_ext, act_name, start_time, end_time FROM `ecs`.`ecs_favourable_activity` WHERE start_time <= '1216338055' AND end_time >= '1216338055'
其中'1216338055'是时间,随着时间的变化,这些sql语句也在发生变化,所以他们会被当作不同的语句而被缓存,然后文件就会越来越多。
而这些语句超过当前时间就不会再被执行,缓存起来没有意义。也许还有其他没必要缓存的sql,测试网站数据太少,可能没发现。
官方出了禁止缓存的补丁,但是缓存还是有一定实际效果的,完全禁用也不可取。
所以只对favourable_activity,goods_activity这2个表禁止缓存即可。
简单解决方法:
打开include/init.php
找到
$db->set_disable_cache_tables(array($ecs->table('sessions'), $ecs->table('sessions_data'), $ecs->table('cart')));
修改为
$db->set_disable_cache_tables(array($ecs->table('sessions'), $ecs->table('sessions_data'), $ecs->table('cart'), $ecs->table('favourable_activity'), $ecs->table('goods_activity')));
即可
复杂点的方法:
只对类似上面2条的sql语句禁止缓存,这样上面2个表其他类型的sql仍然可以被缓存。
有兴趣的可到
http://bbs.w3zz.com/thread-206-1-1.html 查看,不熟悉的初学者建议用简单的方法.
测试数据太少无法做更多测试,被生成大量缓存的可以用此方法试试,然后说下效果,谢谢。
原文
http://bbs.ecshop.com/thread-61111-1-1.html