sql - 如何处理 SQL 查询结果缓存

标签 sql perl caching

在 Perl 程序中,我缓存 SQL 请求结果以加快程序速度。

我看到了两种常见的方法:

  • 使用查询创建哈希作为缓存结果的索引,如建议的 here
  • 创建一个只有 2 个索引的哈希,第一个是已使用表的列表,第二个是 where 子句

  • 我今天使用了第二个选项,因为当您知道它们已更改时,更容易清理给定表集的缓存。

    我的问题是处理缓存清理,今天我做的大多数选择查询都是针对几乎没有变化的表。因此,当我运行更新/删除/...时,我只是清理了为该表缓存结果的哈希表部分。

    这对性能影响很小,因为我很少需要清理经常使用的散列部分。
    但是现在对于在大多数表上更频繁地更新/删除的程序来说,这会使我的缓存效率大大降低,因为我经常需要清理它。

    如何处理?我目前的缓存系统很简单,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/

    相关文章:

    rest - 何时以及如何更新缓存

    python - Django 中的外部 API 调用缓存

    php - 如何忽略 MySQL 查询中 JOIN 表的结果

    sql - SQL中如何选择表的最后一条记录?

    sql - Rails - 转义 SQL 参数

    perl - 模板工具包中的单引号转义

    regex - 查找文件中的数字并使用 perl 更改其值

    c++ - 有没有办法从 pcrecpp 获取 PREMATCH ( $`) and POSTMATCH ($' )?

    maven - 如果默认情况下禁用了构建缓存,gradle守护程序有哪些优势?

    mysql - 如何在多列上执行 SELECT(例如 2)?