데이터베이스 쿼리 성능을 최적화하는 것은 고성능 PHP 응용 프로그램을 개발할 때 일반적인 과제입니다. 특히 다량의 데이터를 처리 할 때 동일한 쿼리를 반복적으로 실행하면 응용 프로그램 응답 시간이 크게 느려질 수 있습니다. 현재 캐시 된 쿼리 결과는 효과적인 최적화 방법이됩니다. 이 기사는 MySQLI_RESULT Query 결과를 REDIS 또는 파일 시스템으로 캐싱하여 PHP 응용 프로그램 성능을 최적화하는 방법을 살펴 봅니다.
응용 프로그램이 데이터베이스 쿼리를 수행 할 때마다 데이터베이스 엔진은 하드 디스크의 데이터를 읽고 쿼리 결과를 생성합니다. 이러한 쿼리가 중복되고 데이터가 드물게 변경되면 매번 데이터베이스에서 동일한 데이터를 읽을 필요가 없습니다. 캐싱 기술은 쿼리 결과를 메모리에 저장하거나 로컬 파일 시스템에 저장하여 데이터베이스 액세스 빈도를 줄이고 응용 프로그램 성능을 향상시킬 수 있습니다.
Redis는 오픈 소스 인 메모리 데이터 저장 시스템으로, 종종 데이터를 캐시하는 데 사용되며, 특히 자주 액세스하는 데이터를 저장하는 데 적합합니다. 다음은 mysqli_result query 결과를 redis로 캐시하는 기본 단계입니다.
먼저 서버에 Redis 서비스를 설치해야합니다. 설치 방법은 운영 체제에 따라 다릅니다. 자세한 설치 단계는 M66.net/redis-installation을 참조 할 수 있습니다.
PHP에서 Redis를 사용하려면 PHP 용 Redis 확장을 설치해야합니다. 다음 명령을 통해 설치할 수 있습니다.
sudo pecl install redis
그런 다음 php.ini 파일에서 redis 확장자를 활성화합니다.
extension=redis.so
다음은 MySQL 쿼리 결과를 redis로 캐시하는 방법을 보여주는 간단한 예제 코드입니다.
<?php
// 연결하다 MySQL 데이터 베이스
$mysqli = new mysqli('localhost', 'username', 'password', 'database');
// 检查연결하다是否成功
if ($mysqli->connect_error) {
die('연결하다失败: ' . $mysqli->connect_error);
}
// 쿼리 캐시 키
$queryKey = 'my_query_result';
// 연결하다 Redis
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
// 시도해보십시오 Redis 캐시 된 데이터를 가져옵니다
$cachedResult = $redis->get($queryKey);
if ($cachedResult) {
// 만약에 Redis 캐시 결과가 있습니다,직접 돌아옵니다
$result = unserialize($cachedResult);
echo '~에서 Redis 데이터를 얻으십시오:';
} else {
// 만약에 Redis 캐시 된 결과가 없습니다,쿼리 및 캐시 결과를 실행하십시오
$result = $mysqli->query('SELECT * FROM my_table');
// 쿼리 결과를 직렬화하고 저장합니다 Redis
$redis->set($queryKey, serialize($result), 3600); // 캐시 유효성 기간을 설정하십시오 1 시간
echo '~에서 MySQL 데이터를 얻으십시오:';
}
// 쿼리 결과를 인쇄하십시오
while ($row = $result->fetch_assoc()) {
echo $row['column_name'] . "\n";
}
// 关闭연결하다
$mysqli->close();
?>
이 예에서는 먼저 Redis에서 캐시 된 쿼리 결과를 얻으려고 노력합니다. Redis에 캐시 된 데이터가있는 경우 직접 사용하십시오. 캐시 된 데이터가 없으면 쿼리를 실행하고 결과를 Redis에 저장하십시오.
캐시는 특히 데이터가 변경 될 때 영원히 존재해서는 안됩니다. 데이터 적시성을 보장하려면 캐시 만료 시간을 설정할 수 있습니다 (위의 예에서는 3600 초, 1 시간). 응용 프로그램의 요구에 따라이 시간을 조정할 수 있습니다.
Redis를 사용하지 않으려면 파일 시스템을 사용하여 쿼리 결과를 캐시하도록 선택할 수도 있습니다. 파일 시스템 캐시는 매우 높은 액세스 속도가 필요하지 않으며 Redis보다 배포하기가 더 쉬운 시나리오에 적합합니다.
다음은 쿼리 결과를 파일 시스템에 캐시하는 방법을 보여주는 간단한 예입니다.
<?php
// 연결하다 MySQL 데이터 베이스
$mysqli = new mysqli('localhost', 'username', 'password', 'database');
// 检查연결하다是否成功
if ($mysqli->connect_error) {
die('연결하다失败: ' . $mysqli->connect_error);
}
// 캐시 된 파일 경로를 쿼리하십시오
$cacheFile = 'cache/my_query_result.cache';
// 캐시 파일이 존재하고 만료되지 않은지 확인하십시오.
if (file_exists($cacheFile) && filemtime($cacheFile) > (time() - 3600)) {
// 만약에缓存文件存在且未过期,파일 내용을 읽으십시오
$result = unserialize(file_get_contents($cacheFile));
echo '~에서文件缓存데이터를 얻으십시오:';
} else {
// 만약에缓存文件不存在或已过期,쿼리 및 캐시 결과를 실행하십시오到文件
$result = $mysqli->query('SELECT * FROM my_table');
// 쿼리 결과를 파일에 직렬화하고 저장하십시오
file_put_contents($cacheFile, serialize($result));
echo '~에서 MySQL 데이터를 얻으십시오:';
}
// 쿼리 결과를 인쇄하십시오
while ($row = $result->fetch_assoc()) {
echo $row['column_name'] . "\n";
}
// 关闭연결하다
$mysqli->close();
?>
이 예에서는 쿼리 결과를 직렬화하여 파일에 저장합니다. 파일이 존재하고 만료되지 않은 경우 파일에서 직접 캐시 된 결과를 읽습니다. 그렇지 않으면 쿼리를 실행하고 결과를 파일에 저장하십시오.
Redis와 유사하게 파일 시스템 캐시를 사용할 때도 캐시 만료 시간을 설정해야합니다. 예제 코드에서 FileMtime 함수는 캐시 된 파일의 마지막 수정 시간을 결정하여 데이터베이스가 필요한지 여부를 결정합니다.
MySQLI_RESULT Query 결과를 REDIS 또는 파일 시스템에 캐싱함으로써 PHP 응용 프로그램의 성능을 크게 개선하고 데이터베이스의 부담을 줄일 수 있습니다. Redis는 데이터에 자주 액세스하는 시나리오에 더 적합한 반면 파일 시스템 캐시는 액세스 빈도가 적은 애플리케이션에 적합합니다. 선택할 캐싱 방법은 응용 프로그램의 요구 및 배포 환경에 따라 다릅니다.
Redis 또는 파일 시스템 캐시를 선택하든 데이터의 적시성과 정확성을 보장하기 위해 실제 상황에 따라 합리적인 캐시 고장 시간을 설정해야합니다.