在Perl程序中,我缓存SQL请求结果以加速程序。
我看到两种常见的方法:
我今天使用了第二个选项,因为当你知道它们已被更改时,更容易清理一组给定表的缓存。
我的问题是处理缓存清理,今天我做的大多数选择查询都是针对表,只有很少的更改。因此,当我运行更新/删除/ ...时,我只需清理缓存此表的缓存结果的哈希表部分。
这对性能几乎没有影响,因为我很少需要清理常用的哈希部分 但是现在对于在大多数表上更频繁地更新/删除的程序,这使我的缓存效率降低,因为我经常需要清理它。
如何处理?我当前的缓存系统非常简单,Cache :: Memcached :: Fast非常复杂。你有一个比我更高效但仍然很简单的解决方案吗?
答案 0 :(得分:1)
我用来缓存不太可能改变的数据的一种方法(例如配置数据)是通过优秀的Memoize模块使用memoization。我将sql查询包装在一个函数中,我传入了bind参数和表名,并记住该函数。
use Memoize;
sub get_config_for_foo
{
my ($table, $field1, $field2) @_;
# generate my sql query here, using table, field1 and field2...
return $result;
}
memoize(get_config_for_foo);
您还可以在memcache或类似的东西中使用缓存策略;查看Tie::Cache::LRU以获得良好的实施方案。