Windows Cache for PHP

Windows Cache for PHP (WinCache)

WinCache(Windows Cache for PHP)는 **Windows와 Windows Server에서 PHP 애플리케이션의 속도를 높이기 위한 PHP 가속기(accelerator)**예요. 이 페이지에서는 어떤 캐시 타입들이 있는지 개요를 살펴봐요.

출처: Windows Cache for PHP

본문

Windows Cache Extension for PHP는 Windows와 Windows Server에서 돌아가는 PHP 애플리케이션의 속도를 높이는 PHP 가속기입니다. PHP 엔진에 의해 활성화되고 로드되기만 하면, 코드 수정 없이 PHP 애플리케이션이 그 기능을 활용할 수 있어요.

Windows Cache Extension은 5가지 종류의 캐시를 포함합니다. 각 캐시 타입의 목적과 이점을 살펴볼게요.

PHP Opcode Cache — PHP는 스크립트 처리 엔진이라, 텍스트와/또는 PHP 명령을 포함하는 입력 스트림을 읽어 대부분 HTML 형식의 또 다른 스트림을 만들어냅니다. 즉 웹 서버에서는 웹 클라이언트가 요청할 때마다 PHP 엔진이 스크립트를 읽고, 파싱하고, 컴파일하고, 실행해요. 이 읽기·파싱·컴파일 작업이 웹 서버의 CPU와 파일 시스템에 추가 부하를 주고, 그래서 PHP 웹 애플리케이션 전체 성능에 영향을 줍니다. PHP 바이트코드(opcode) 캐시는 컴파일된 스크립트 바이트코드를 공유 메모리에 저장해서, 같은 스크립트의 이후 실행에서 PHP 엔진이 재사용하게 해줍니다.

참고: opcode 캐싱 지원은 Wincache 2.0.0에서 제거되었습니다. opcache가 필요한 사용자는 PHP에 포함된 OPcache 확장을 사용해야 해요.

File Cache — PHP opcode 캐시가 켜져 있어도 PHP 엔진은 스크립트 파일을 파일 시스템에서 접근해야 해요. PHP 스크립트가 원격 UNC 파일 공유에 저장되어 있으면, 파일 연산이 상당한 성능 오버헤드를 발생시킵니다. Windows Cache Extension의 file cache는 PHP 스크립트 파일 내용을 공유 메모리에 저장해서 PHP 엔진이 수행하는 파일 시스템 연산 횟수를 줄여줍니다.

Resolve File Path Cache — PHP 스크립트는 매우 자주 상대 파일 경로로 파일을 include하거나 다룹니다. 모든 파일 경로는 PHP 엔진이 절대 경로로 정규화(normalize)해야 해요. 상대 경로로 많은 PHP 파일을 접근하면 경로를 해석하는 작업이 성능에 부정적 영향을 줄 수 있습니다. Resolve File Path cache는 상대 경로와 절대 경로 간의 매핑을 저장해서 PHP 엔진이 수행해야 하는 경로 해석 횟수를 줄여줍니다.

User Cache (1.1.0 버전부터 사용 가능) — PHP 스크립트는 user cache API를 통해 공유 메모리 캐시를 활용할 수 있어요. PHP 객체와 변수를 user cache에 저장하고 이후 요청에서 재사용할 수 있습니다. 이를 통해 PHP 스크립트 성능을 높이고 여러 PHP 프로세스 간에 데이터를 공유할 수 있어요.

Session Handler (1.1.0 버전부터 사용 가능) — WinCache 세션 핸들러는 PHP 세션 데이터를 공유 메모리 캐시에 저장할 수 있게 해줍니다. 세션 데이터를 읽고 쓰는 데 드는 파일 시스템 연산을 피하게 되므로, 대량의 데이터가 PHP 세션에 저장될 때 성능이 개선돼요.

주요 함수들은 다음과 같아요.

  • 캐시 정보wincache_fcache_fileinfo, wincache_fcache_meminfo, wincache_ocache_fileinfo, wincache_ocache_meminfo, wincache_rplist_fileinfo, wincache_rplist_meminfo, wincache_scache_info, wincache_scache_meminfo
  • 잠금wincache_lock, wincache_unlock
  • 새로고침wincache_refresh_if_changed
  • user cachewincache_ucache_add, wincache_ucache_cas, wincache_ucache_clear, wincache_ucache_dec, wincache_ucache_delete, wincache_ucache_exists, wincache_ucache_get, wincache_ucache_inc, wincache_ucache_info, wincache_ucache_meminfo, wincache_ucache_set

더 알아보기