최근 프로젝트 필요로 인해
특정 작업을 수행하려면 데이터베이스에서 정기적으로 많은 데이터를 가져오려면 절전 기능을 사용해야 합니다.
수면 대기 시간은 최소 1시간입니다
이전에 테스트
몇 시간 후에 수행된 작업을 완료하기 위해 절전 기능을 사용할 수 있습니다
하지만 여기서 사악한 문제가 발생합니다
sleep을 사용한 후 프로그램은 데이터베이스에서 해당 정보를 가져올 수 없음을 발견했습니다
수면 제거
결과는 정상입니다
우울한. . .
수면이 도서관 독서 작업에 영향을 미치나요? ! !
그래서 테스트의 편의를 위해
그냥 sleep(10) 하고 10초 안에 실행하세요
결과는 데이터베이스에서 정보를 읽을 수 있습니다
그런데 왜 sleep()은 한 시간 후에 정보를 읽을 수 없습니까?
테스트의 편의를 위해 sleep문 바로 직전에 라이브러리를 읽고, sleep문 다음에 다시 라이브러리를 읽습니다
예:
require_once('include.php');
//데이터베이스 정보 읽기
$data = $db->getList();
print_r($data);
// 한 시간 후에 예약
수면(3600);
// 정보를 다시 읽어보세요
$data = $db->getList();
print_r($data);
?>
처음으로 데이터베이스 읽기에 성공했습니다
두 번째 읽기 라이브러리가 비어 있습니다
그래서 잠을 10초로 변경하고 다시 테스트해봤습니다
require_once('include.php');
//데이터베이스 정보 읽기
$data = $db->getList();
print_r($data);
// 10초 후 타이머
수면(10);
// 정보를 다시 읽어보세요
$data = $db->getList();
print_r($data);
?>
위의 결과
데이터베이스를 두 번 성공적으로 읽었습니다.
1시간 후에 데이터베이스 읽기가 실패하지만 10초 후에 데이터베이스 읽기에 성공하는 이유는 무엇입니까? ?
싱글톤 데이터베이스 작업 클래스를 사용합니다
질문이 떠오릅니다
데이터베이스 연결 시간이 초과되어 데이터베이스 읽기가 실패했을 수 있습니까?
그래서 여기서 데이터베이스 읽기 동작을 실시간 연결로 빠르게 변경했습니다
require_once('include.php');
//데이터베이스 정보 읽기
$data = getList();
print_r($data);
// 한 시간 후에 예약
수면(3600);
// 정보를 다시 읽어보세요
$data = getList();
print_r($data);
//데이터베이스 정보 읽기
함수 getList(){
$pdo = 새 PDO('mysql:host=localhost;dbname=test','root','root');
$result = $pdo->query('테이블에서 * 선택');
return $result->fetchAll(PDO::FETCH_ASSOC);
}
?>
테스트 성공! !
sleep으로 인해 싱글톤 클래스가 시간 초과되고, 실행 시간이 너무 길어지면 데이터베이스 연결이 끊어지고 데이터베이스 정보를 읽을 수 없는 것으로 나타났습니다!