【问题标题】:Using the same MySQL query with all users without having to reconnect to the database [closed]对所有用户使用相同的 MySQL 查询,而无需重新连接到数据库 [关闭]
【发布时间】:2012-11-13 12:45:08
【问题描述】:

我会尽量简单,所以我需要的是,执行一个 MySQL 查询(从表中选择记录),假设我每隔 5 分钟使用 cron 作业或其他任何方式生成一次查询,然后将此查询或结果保存到如果可能的话,一个文件或一个全局变量,然后将其提供给所有客户端(即对所有用户使用相同的查询,而无需重新连接到该数据库。) 现在我知道你们中有些人会告诉我使用缓存,但我搜索了它,如果表更改将有新的缓存,并且我的表在不断变化,现在我不在乎表是否已更改,我只想为所有客户提供相同的查询。 那可能吗?请提出您的建议。 谢谢。

当表被修改(插入、更新、删除等)时,缓存会自动过期。 而且我的表是不断变化的,所以即使表被修改了也能保存缓存吗?还是我应该寻找不同的解决方案?

【问题讨论】:

  • 您研究过缓存解决方案吗?
  • 重复相同的查询并不罕见 - 您有具体问题吗? mysql 默认会做一些缓存。
  • 是的,我已经在我的问题中提到了这一点,但正如我所说,我的表在不断变化,如果表已更新,缓存将被删除。
  • @Dagon,我的具体问题是我对所有用户使用相同的查询,但我对每个用户的操作方式不同。
  • 等等?这有什么问题?

标签: php mysql caching query-cache


【解决方案1】:

如果结果集不是太大,您可以将其缓存到生成的脚本中,如下所示:

file_put_contents(
    'mycache.php', 
    '<?php return ' . var_export($results, true) . ' ?>'
);

然后使用它:

$results = include 'mycache.php';

【讨论】:

  • 非常感谢。你的方法正好满足了我的需要。
【解决方案2】:

如果您总是使用相同的方式(函数、类)来执行数据库读写,
您总是可以在每次操作后设置缓存过期时间

例如:

function add() // update, delete
{
  if (added) $this->expire_cache();
}

function search()
{
  if (results) $this->set_cache(results);
}

function expire_cache()
{
  // do expire or purge cache
}

function set_cache( $db_results )
{
  // saving the database result OR computed result into cache
  // memcache, redis, disk cache or anything
}

但是,拥有缓存的目的是为请求提供服务,而不必获取数据库查询等昂贵的资源,
但是如果你需要非常频繁地更新,那么缓存实现就没那么有用了

内存缓存示例:http://php.net/manual/en/book.memcache.php

您需要编译 memcache 模块,设置和启动 memcache 服务器才能使用 memcache

【讨论】:

  • 是的,因为我的表更新非常频繁:/ 所以我不能使用 MySQL 缓存。问题是,你只能在检测到的服务器上安装 memcache。
猜你喜欢
  • 1970-01-01
  • 2015-01-06
  • 1970-01-01
  • 2012-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多