【问题标题】:Query Caching in PHP For mySQL PerformancePHP 中的查询缓存以提高 mySQL 性能
【发布时间】:2011-07-02 11:19:48
【问题描述】:

我正在寻找一个系统来缓存已经编码的项目(使用 PHP),它具有注册和登录系统等功能。

我已经搜索了一些缓存解决方案,但我读到如果我使用这些功能,登录和发布系统会失败。

我真正需要的是存储一些特殊数据库查询的结果,如果有缓存,则调用该结果,如果没有生成新缓存,并在每 x 分钟内重新缓存它们。 (结果可以存储在 txt 等中)。

我该怎么做?

顺便说一句,将 query_cache_type 设置为 1 不起作用。我正在寻找替代解决方案。

谢谢

【问题讨论】:

标签: php mysql caching


【解决方案1】:

基本上你需要缓存查询:

 # After: [with memcache]
    $rSlowQuery = mysql_query_cache($sql);
    # $rSlowQuery is an array
    $rows = count($rSlowQuery);
    for ($i=0;$i<$rows;$i++) { }

【讨论】:

    【解决方案2】:

    减少数据库调用 查看支持 WinCache、MemCache、文件、X-Cache、APC 缓存的phpFastCache。对初学者来说很简单

    数据库的 PHP 缓存类:您的网站有 10,000 名访问者 在线,并且您的动态页面必须发送 10,000 个相同的查询到 每个页面加载的数据库。使用 phpFastCache,你的页面只发送 1 查询数据库,并使用缓存为其他 9,999 个访问者提供服务。

    <?php
        // In your config file
        include("php_fast_cache.php");
        // This is Optional Config only. You can skip these lines.
        // phpFastCache support "apc", "memcache", "memcached", "wincache" ,"files", "pdo", "mpdo" and "xcache"
        // You don't need to change your code when you change your caching system. Or simple keep it auto
        phpFastCache::$storage = "auto";
        // End Optionals
    
        // In your Class, Functions, PHP Pages
        // try to get from Cache first.
        $products = phpFastCache::get("products_page");
    
        if($products == null) {
            $products = YOUR DB QUERIES || GET_PRODUCTS_FUNCTION;
            // set products in to cache in 600 seconds = 10 minutes
            phpFastCache::set("products_page",$products,600);
        }
    
        foreach($products as $product) {
            // Output Your Contents HERE
        }
    ?>
    

    【讨论】:

      【解决方案3】:

      我最近遇到了类似的问题,下面是我的解决方法...


      第 1 步:.user.ini 文件添加到您的项目根目录(如果您还没有),并将以下指令添加到文件中以启用 mysqlnd_qc 插件并设置缓存的 TTL:

      ; Enables MySQL query caching by PHP
      mysqlnd_qc.enable_qc = 1
      
      ; Set a default TTL for the caching in seconds
      mysqlnd_qc.ttl = 30
      

      第 2 步:在您希望 mysqlnd_qc 缓存的任何查询之前添加 SQL 提示。

      这是必须添加到查询中的提示:

      "/*" . MYSQLND_QC_ENABLE_SWITCH . "*/" .
      

      这是一个使用示例:

      $res = $mysqli->query("/*" . MYSQLND_QC_ENABLE_SWITCH . "*/" . "SELECT id FROM test WHERE id = 1");
      

      应该这样做!您还可以使用 mysqlnd_qc.cache_no_table = 1 指令缓存所有查询。

      所有这些都来自 PHP 的文档,这里:http://php.net/manual/en/mysqlnd-qc.quickstart.caching.php

      希望对你有帮助!

      【讨论】:

        【解决方案4】:

        你可以试试这个:

        $mysqli -> query("/*qc=on*/ SELECT * FROM table");
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-12-03
          • 2023-04-08
          • 1970-01-01
          • 2016-08-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多