2014-09-17 2 views
1

MySQL 연결 캐싱에 단점이 있습니까? 사이트의 모든 요구 연결에 많은 사용자가있는 경우이 시간을 절약 할 수PHP로 MySQL 연결을 캐시해야합니까?

$mysqli = new mysqli(params); 
apc_store('mysqli', $mysqli); 

예를 들어

. 모든 사용자에 대한 연결을 여는 대신 왜 캐시하지 않습니까?

나는 인터넷 검색으로 아무 것도 발견하지 못했고, 그래서 나는 뭔가를 놓친 적이 있는지 궁금해하고 있습니다.

감사합니다.

+0

[MySQLI Persistent Connections] (http://php.net/manual/en/mysqli.persistconns.php) – Barmar

+0

@Barmar를 참조하십시오. 이는 모든 사용자에게 연결을 유지하는 것이므로 많은 경우 비효율적입니다. – Kausheel

+0

'MySQLi' 연결을 캐시 할 수 없습니다. 가능한 경우에도 연결은 캐시에서 검색 될 때마다 계속 연결해야합니다 (APC에 의해 캐시되는 항목은 직렬화되며 연결을 다시 설정하려면'__wakeup() '호출이 필요합니다). 다른 말로하면 이렇게하는 것이 유리하지 않습니다. –

답변

5

mysqli 객체는 캐시 할 수있는 것이 아닙니다. 리소스이며 일반 개체가 아닙니다.

캐시에서 가져 오려면 데이터베이스 서버에 다시 연결해야합니다. 즉, 캐시 된 버전은 일반 텍스트로 암호를 저장해야하므로 캐시 할 수있는 보안 결함이됩니다.

또한 캐시에서 데이터베이스 서버를 가져올 때 데이터베이스 서버를 계속 사용할 수 있다고 보장 할 수 없습니다.

여러 PHP 요청이 동일한 캐시 된 리소스를 공유 할 수있는 방법이 없습니다. 이 계획에는 여러 가지 문제가 있습니다.

목표를위한 해결책은 persistent mysqli connections입니다. 따라서 PHP 런타임 환경은 몇 가지 연결 수를 유지하고 한 PHP 요청에서 다음 PHP 요청으로 다시 사용할 수 있습니다.

+0

좋은 대답, 고마워요. – Kausheel