我正在开发一个包含多个使用一个主sql数据库的http服务器的大项目。
项目有许多经常使用的设置(几乎每个请求)。 设置存储在主sql数据库中。
我想知道,如果有一些方法只能在php中初始化一次设置,因为每次请求从sql server一遍又一遍地读取相同的设置都没有意义,这感觉就像是浪费资源
提前致谢
答案 0 :(得分:3)
2个解决方案:
创建一个(也可能是PHP)脚本,将数据库中的设置导出为纯文本文件,并在每个http服务器上包含该文件;
使用像http://memcached.org/这样的内存缓存服务器,并从外部脚本预加载数据,然后让http服务器连接到memcache而不是SQL。
编辑:除此之外,PHP不会为您提供真正的Web应用程序,您可以“运行”您的应用程序,它有自己的内存和持久的全局变量。这是我个人厌倦了PHP并转向Python(特别是Django)的原因之一。
答案 1 :(得分:0)
在PHP代码中对这些设置进行硬编码。
// Your current code, somthing like this:
$setting_1 = getDataFromMySQL('setting1');
// Hard coded
$setting_1 = TRUE;
答案 2 :(得分:0)
如果以这种方式编译,你可以在php中使用shared memory。
另一种可能性是您将设置的组合值作为PHP代码存储在一个字段(例如PHP数组)中,然后只需向DB服务器发送一个查询即可读取所有这些值。当然,当设置更改时,必须更新此缓存值。
答案 3 :(得分:0)
如果你使用的是单个服务器,APC是最好的解决方案,否则我会选择memcached。但是,您也可以考虑使用MYSQL内存表,它对于快速读写非常有效。另一个解决方案是使用Linux来保存和调用Linux exec的设置。但是,这可能是一个麻烦,可能存在一些安全问题。另外,请允许我提醒您,有效的INNODB索引可以为您提供很多帮助。 MYISAM也被认为是一个很好的“阅读”表演者,但我的基准测试表明,INNODB指数更快。
答案 4 :(得分:-1)
您可以将设置存储在用户的会话中 -
session_start();
if (!isset($_SESSION['settings'])) {
$settings_array = //pulled from database
$_SESSION['settings'] = $settings_array;
}
这样,每个用户只会查询一次
答案 5 :(得分:-1)
您可以使用会话来存储这些设置。