繁体   English   中英

在PHP中查询缓存以获得mySQL性能

[英]Query Caching in PHP For mySQL Performance

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

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

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

我怎样才能做到这一点?

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

谢谢

基本上你需要缓存查询:

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

减少数据库调用查看phpFastCache支持WINCACHE,内存缓存,文件,X-Cache功能,APC缓存。 这对初学者来说很简单

PHP缓存类数据库:您的网站有10,000名在线访问者,您的动态页面必须在每次加载页面时向数据库发送10,000个相同的查询。 使用phpFastCache,您的页面只向DB发送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
    }
?>

我最近遇到了类似的问题,这就是我如何解决它...


步骤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

我希望有所帮助!

你可以试试这个:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM