在 Perl 程序中,我缓存 SQL 请求结果以加快程序速度。
我看到了两种常见的方法:
我今天使用了第二个选项,因为当您知道它们已更改时,更容易清理给定表集的缓存。
我的问题是处理缓存清理,今天我做的大多数选择查询都是针对几乎没有变化的表。因此,当我运行更新/删除/...时,我只是清理了为该表缓存结果的哈希表部分。
这对性能影响很小,因为我很少需要清理经常使用的散列部分。
但是现在对于在大多数表上更频繁地更新/删除的程序来说,这会使我的缓存效率大大降低,因为我经常需要清理它。
如何处理?我目前的缓存系统很简单,Cache::Memcached::Fast 很复杂。您是否有比我的更有效但仍然非常简单的解决方案?
最佳答案
我用于缓存不太可能更改的数据(例如配置数据)的一种方法是使用记忆化,通过出色的 Memoize模块。我将 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对此有一个很好的实现。
关于sql - 如何处理 SQL 查询结果缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3097876/