>백엔드 개발 >PHP 튜토리얼 >[codeigniter 5], 쿼리 캐시

[codeigniter 5], 쿼리 캐시

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB원래의
2016-07-30 13:31:39970검색

데이터베이스 캐시 클래스

데이터베이스 캐시 클래스를 사용하면 데이터베이스 쿼리 결과를 텍스트 파일로 저장하여 데이터베이스 액세스를 줄일 수 있습니다.

중요

캐싱이 활성화되면 이 클래스는 데이터베이스 드라이버에 의해 자동으로 로드됩니다. 수동으로 로드하지 마십시오.

중요

모든 쿼리 결과를 캐시할 수 있는 것은 아닙니다. 이 페이지의 내용을 주의 깊게 읽어보시기 바랍니다.

캐시 활성화

캐시 활성화에는 세 단계가 필요합니다.

  • 캐시 파일을 저장하기 위해 서버에 쓰기 가능한 디렉터리를 만듭니다.
  • application/config/database.php 파일의 cashdir 매개변수를 통해 디렉토리 경로를 설정합니다.
  • application/config/database.php 파일의 캐시_on 매개변수를 TRUE로 설정하여 다음을 사용할 수도 있습니다. 다음 방법은 수동으로 구성됩니다.

캐싱이 활성화되면 페이지가 로드될 때마다 페이지에 데이터베이스 쿼리가 포함되어 있는 한 자동으로 캐시됩니다.

캐싱은 어떻게 작동하나요?

CodeIgniter의 쿼리 캐싱 시스템은 페이지를 방문할 때 자동으로 실행됩니다. 캐싱이 활성화된 경우 페이지가 처음 로드될 때 쿼리 결과 개체가 직렬화되어 서버의 텍스트 파일에 저장됩니다. 다음에 해당 페이지에 접속하면 데이터베이스에 접속하지 않고 바로 캐시 파일을 사용하게 됩니다. 이렇게 하면 캐시된 페이지에서는 데이터베이스 접속 권한이 0으로 떨어지게 됩니다.

읽기 유형(SELECT) 쿼리만 결과를 생성하므로 캐시할 수 있습니다. 쓰기 유형 쿼리(INSERT, UPDATE 등)는 결과를 생성하지 않으므로 캐시되지 않습니다.

캐시 파일은 만료되지 않으며 모든 쿼리는 삭제하지 않는 이상 캐시되어 있는 한 계속 사용할 수 있습니다. 특정 페이지의 캐시를 삭제하거나 전체 캐시를 지울 수 있습니다. 일반적으로 특정 이벤트(데이터베이스에 데이터가 추가되는 등)가 발생할 때 다음 기능을 사용하여 캐시를 지울 수 있습니다.

캐싱이 사이트 성능을 향상시킬 수 있나요?

캐싱으로 성능을 향상시킬 수 있는지 여부는 여러 요인에 따라 달라집니다. 낮은 부하에서 고도로 최적화된 데이터베이스를 사용하는 경우 성능 향상이 나타나지 않을 수 있습니다. 데이터베이스에 과도하게 액세스하는 경우 파일 시스템에 오버헤드가 너무 많지 않다면 캐싱 후 성능이 향상될 수 있습니다. 한 가지 기억해야 할 점은 캐싱이 데이터베이스 액세스에서 파일 시스템 액세스까지 데이터를 얻는 방식을 단순히 변경한다는 것입니다.

예를 들어 일부 클러스터 서버 환경에서는 너무 빈번한 파일 시스템 작업으로 인해 캐싱이 실제로 해로울 수 있습니다. 캐싱은 공유된 단일 서버 환경에서만 유용할 수 있습니다. 안타깝게도 데이터베이스를 캐시해야 하는지 여부에 대한 질문에 대한 단일 답변은 없으며 모두 상황에 따라 다릅니다.

캐시 파일은 어떻게 저장되나요?

CodeIgniter는 각 쿼리를 자체 캐시 파일에 캐시하며, 이 캐시 파일은 호출된 컨트롤러 메서드에 따라 각 하위 디렉터리로 추가로 구성됩니다. 더 정확하게 말하면 하위 디렉터리의 이름은 URI의 처음 두 세그먼트(컨트롤러 이름 및 메서드 이름)를 사용하여 지정됩니다.

예를 들어 블로그 컨트롤러와 세 가지 다른 쿼리가 포함된 댓글 방법이 있습니다. 캐싱 시스템은 blog+comments라는 디렉터리를 만들고 이 디렉터리에 세 개의 캐시 파일을 생성합니다.

URI에 동적 쿼리(예: 페이징 사용 시)가 포함된 경우 각 쿼리 인스턴스는 자체 별도의 캐시 파일을 생성하므로 결국 캐시 파일 수는 사용자의 쿼리 수와 같을 수 있습니다. 페이지에서는 이런 일이 여러 번 발생합니다.

캐시 파일 관리

캐시 파일은 만료되지 않으므로 애플리케이션에서 캐시를 삭제하는 메커니즘이 있어야 합니다. 예를 들어 a 블로그에서는 사용자가 새 댓글을 제출할 때마다 해당 댓글을 표시하는 컨트롤러 메서드에 해당하는 캐시 파일을 삭제해야 합니다. 캐시된 데이터를 삭제하는 방법에는 두 가지가 있습니다.

모든 데이터베이스 메소드가 캐시와 호환되는 것은 아닙니다.

마지막으로, 캐시된 결과 객체는 결과 객체의 단순화된 버전일 뿐이라는 점을 지적해야 합니다. , 결과를 쿼리하는 여러 가지 방법을 사용할 수 없습니다.

아래 나열된 메서드는 캐시된 결과 개체에 사용할 수 없습니다.

  • num_fields()
  • field_names()
  • field_data()
  • free_result()

동시에 result_id와 conn_id 두 ID는 실시간 데이터베이스 작업에만 적합하므로 사용할 수 없습니다.

함수 참조

$this->db->cache_on() / $this->db->cache_off()

캐싱을 수동으로 활성화/비활성화하는 경우 특정 쿼리를 캐시하지 않으려는 경우 이 두 가지 방법이 유용할 수 있습니다. 예:

// Turn caching on
$this->db->cache_on();
$query = $this->db->query("SELECT * FROM mytable");

// Turn caching off for this one query
$this->db->cache_off();
$query = $this->db->query("SELECT * FROM members WHERE member_id = '$current_user'");

// Turn caching back on
$this->db->cache_on();
$query = $this->db->query("SELECT * FROM another_table");

$this->db->cache_delete()

업데이트할 때 특정 페이지에 대한 캐시 파일을 삭제합니다. 나중에 데이터베이스를 지워야 할 때 유용합니다.

캐시 시스템은 귀하가 방문하는 페이지의 URI에 따라 해당 캐시 파일에 캐시를 기록합니다. 예를 들어 example.com/index.php/blog/comments 페이지를 방문하는 경우 캐시는 다음과 같습니다. 시스템은 캐시 파일을 blog+comments 디렉토리에 저장합니다. 이러한 캐시 파일을 삭제하려면 다음을 사용할 수 있습니다.

$this->db->cache_delete('blog', 'comments');

如果你没提供任何参数,将会清除当前 URI 对应的缓存文件。

$this->db->cache_delete_all()

清除所有的缓存文件,例如:

$this->db->cache_delete_all();

版权声明:本文为博主原创文章,未经博主允许不得转载。

以上就介绍了[codeigniter 五]、查询缓存,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.