discuz다양한 캐시를 사용할 수 있습니다. 여기서는 데이터 캐시에 대해서만 이야기합니다. discuz는 redis, memcache 등의 캐싱 방식을 지원하며, /config/config_global.php에서 설정하기만 하면 되며 환경이 지원하는 경우에만 사용할 수 있습니다.
사실 캐시를 읽고 쓰는 것은 비교적 간단합니다.
require_once libfile('function/cache'); //加载缓存类 savecache($cachename, $data); //写缓存 loadcache($cachename); //读缓存,将缓存写到$_G变量中,通过读取$_G['cache']来获取缓存数据。
savecache()가 쓰는 곳입니다. 데이터를 설정된 캐시(예: memcacheredisxpc 등)에 저장하고 캐시는 common_syscache 테이블에 기록됩니다.
loadcache()를 사용하면 table_common_syscache 클래스의 fetch_all 메서드가 호출되어 캐시를 얻습니다.
1. 먼저 메모리 캐시가 설정되어 있는지 확인합니다. 그렇다면 메모리 캐시 데이터의 경우 데이터가 존재하면 직접 반환되며, 메모리 캐시가 설정되지 않은 경우 2단계로 이동합니다.
2. 그런 다음 파일 캐시가 설정되어 있는지 확인합니다. 그렇다면 파일 캐시 데이터를 읽습니다. 데이터가 존재하지 않으면 직접 반환됩니다. 파일 캐시가 설정되지 않은 경우 3단계로 이동하세요.
3. common_syscache 테이블에서 데이터를 읽고 반환합니다. (그래서 캐시를 지울 때 이런 점을 고려해야 합니다)
캐시를 지우는 것이 핵심인데, 전역->성능에서 가능합니다. 최적화->메모리 최적화 일부 설정이 최적화되어 있으며, 지정된 캐시는 메모리 캐시 관리에서 직접 삭제할 수도 있습니다. 하지만 맞춤형 캐시의 경우 캐시를 삭제하는 자체 기능을 개발해야 합니다. 제 환경에서는 Memcache 캐시가 켜져 있고 시스템에 내장된 memory() 함수를 사용하여 캐시를 삭제했는데, loadcache()를 사용하여 데이터를 읽어보니 캐시가 여전히 존재하는 것을 발견했습니다. 그 이유는 memory()가 Memcache 데이터를 지울 수 있지만 commom_syscache 테이블은 지울 수 없기 때문에 loadcache()를 사용할 때 여전히 존재하기 때문입니다. 나중에 deletegroupcache() 함수를 확인해서 찾았습니다. 전체적인 상황에 적응하기 위해 간단히 /source/function/function_core.php에 deletecache() 함수를 작성했습니다. 코드는 다음과 같습니다:
function deletecache($cachenames) { if(!empty($cachenames)) { C::t('common_syscache')->delete($cachenames); } }
위 내용은 discuz에서 Memcache 캐싱을 사용하는 단계의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!