Php 为每个用户创建缓存文件是否有效?
所以我们在同一个页面上,我正在构建一个PHP类,使用Mojang的web服务Php 为每个用户创建缓存文件是否有效?,php,caching,Php,Caching,所以我们在同一个页面上,我正在构建一个PHP类,使用Mojang的web服务https://sessionserver.mojang.com/session/minecraft/profile/。我想把我得到的结果缓存一个小时,但是,我需要为成千上万的用户这样做。我现在设置它的方式是,该类为我执行的每个请求创建一个缓存文件。一旦我将其投入生产,将生成数千个文件,我不确定这些文件是否非常有效 这是一种有效的方法吗 随着时间的推移,这会导致性能问题吗 如果效率不高,每天删除所有缓存文件是否好 这门课
https://sessionserver.mojang.com/session/minecraft/profile/
。我想把我得到的结果缓存一个小时,但是,我需要为成千上万的用户这样做。我现在设置它的方式是,该类为我执行的每个请求创建一个缓存文件。一旦我将其投入生产,将生成数千个文件,我不确定这些文件是否非常有效
class Player {
private $_uuid,
$_username;
private function fetch($id) {
$query = 'https://sessionserver.mojang.com/session/minecraft/profile/' . $id;
if(file_exists('core/classes/cache/'. $id .'.cache') && (filemtime('core/classes/cache/'. $id .'.cache') > (time() - 60 * 60 ))) {
// Less than 60 minutes, pull from cache
$data = json_decode(file_get_contents('core/classes/cache/'. $id .'.cache'));
} else {
// Over 60 minutes, fetch and store to cache
$data = json_decode(file_get_contents($query));
file_put_contents('core/classes/cache/'. $id .'.cache', json_encode($data));
}
$this->_username = $data->name;
return $this->_username;
}
public function username($uuid) {
return $this->fetch($uuid);
}
因此,这很好,它返回所需的内容并成功创建缓存文件。你们觉得怎么样?是否有更好的方法来缓存此信息
用法:
$user = new Player;
echo $user->username('c3fed4d91c024fb89bf1cb0166aa9104');
返回Wingzzz(此id的用户名)
创建名为c3fed4d91c024fb89bf1cb0166aa9104的缓存文件。缓存中存储有json对象。查看类似的内存缓存系统。这是一个更好更快的解决方案,不会占用磁盘空间 您还可以实现一个系统,其中每个缓存项的生命周期都非常短,但每次用户访问站点时,生命周期都会延长(访问站点一次并离开的用户不会让缓存的数据长时间存储在内存中,但留在站点上的用户不必等待数据被提取,因为数据仍保留在缓存中) 虽然memcached可能是最容易安装的系统,但您也可以安装具有更丰富数据结构的Redis。memcached只支持平面值,但您可以
json\u encode
存储在其中的任何内容
对于基于磁盘的系统,如果没有太多用户,这可能没问题。主要关注的是磁盘IO性能和存储,具体取决于文件的大小。如果这些文件超过一小时,您可以实施cron作业,每小时清理一次
class Player {
private $_uuid,
$_username;
private function fetch($id) {
$query = 'https://sessionserver.mojang.com/session/minecraft/profile/' . $id;
if(file_exists('core/classes/cache/'. $id .'.cache') && (filemtime('core/classes/cache/'. $id .'.cache') > (time() - 60 * 60 ))) {
// Less than 60 minutes, pull from cache
$data = json_decode(file_get_contents('core/classes/cache/'. $id .'.cache'));
} else {
// Over 60 minutes, fetch and store to cache
$data = json_decode(file_get_contents($query));
file_put_contents('core/classes/cache/'. $id .'.cache', json_encode($data));
}
$this->_username = $data->name;
return $this->_username;
}
public function username($uuid) {
return $this->fetch($uuid);
}
您可能需要考虑使用PHP会话来存储数据,PHP会在一段时间后自动删除这些数据,并将其存储在文件系统中,这将使您的实现更加容易
最后,您可能需要考虑完全不存储数据。相反,为什么不为您要存储的数据设置cookie,并让客户端向您传输您需要的所有数据?您必须使用类似签名的系统来验证您的数据是否未被篡改,但这种方式对服务器的影响最小。这似乎是可行的e运行cron作业以删除缓存目录中的所有文件,因为这些缓存文件相对较小。我将如何设置此cron作业?我以前从未在服务器上创建过一个cron作业。请查看Linux cron的工作原理。基本上,您可以向crontab添加一个条目,该条目可以调用PHP清理脚本,也可以使用bash命令来为您执行清理这很容易。如果你在共享主机提供商上,你可能需要使用控制面板来完成。cPanel/Plesk支持cron。