캐시 구성
캐시 설정 방법
글로벌 캐시 구성을 위해서는 구성 디렉터리 아래의 캐시.php 파일을 직접 수정하세요.
ThinkPHP는 캐싱 기능 지원을 제공하기 위해 thinkCache 클래스(실제로는 thinkfacadeCache 클래스만 사용)를 사용합니다. 내장된 지원 캐시 유형에는 file, memcache, wincache, sqlite 및 redis가 포함됩니다. ThinkPHP의 캐싱 클래스는 PSR-6 및 PSR-16 사양을 따릅니다. 모델 및 데이터세트 개체(PDOStatement 개체 포함)의 특수한 특성으로 인해 캐싱은 모델 및 데이터세트 개체 캐싱을 지원하지 않습니다.
새 버전의 캐시는 다중 채널을 지원합니다. 모든 캐시 유형과 구성 매개변수를 미리 정의한 다음 사용할 때 언제든지 전환할 수 있습니다. 파일 캐시 유형은 기본적으로 사용됩니다. 예를 들어 다음과 같이 Redis 캐시 지원을 추가할 수 있습니다.
return [ 'default' => 'file', 'stores' => [ // 文件缓存 'file' => [ // 驱动方式 'type' => 'file', // 设置不同的缓存保存目录 'path' => '../runtime/file/', ], // redis缓存 'redis' => [ // 驱动方式 'type' => 'redis', // 服务器地址 'host' => '127.0.0.1', ], ], ];
애플리케이션이 하나의 캐시 유형만 사용해야 하는 경우 이를 직접 구성하면 시스템이 자동으로 초기화합니다.
return [ // 缓存类型为File 'type' => 'file', // 全局缓存有效期(0为永久有效) 'expire'=> 0, // 缓存前缀 'prefix'=> 'think', // 缓存目录 'path' => '../runtime/cache/', ];
캐시 매개변수는 다양한 캐싱 방법에 따라 다릅니다. 일반적인 캐시 매개변수는 다음과 같습니다.
Parameter | Description |
---|---|
type | Cache type |
expire | 캐시 유효성 기간(기본값 0은 영구 캐시를 의미) |
prefix | 캐시 접두사(기본값은 비어 있음) |
serialize | 캐시 직렬화 및 역직렬화 방법 |
캐시를 설정하려면
을 사용하세요.
캐시 유효 기간을 설정하세요.
// 缓存在3600秒之后过期 Cache::set('name', $value, 3600);
DateTime 개체를 사용하여 만료 시간을 설정할 수 있습니다.
Cache::set('name', $value, new DateTime('2019-10-01 12:00:00'));
설정에 성공하면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
캐시 자동 증가
숫자 유형으로 캐시된 데이터의 경우 자동 증가 연산을 사용할 수 있습니다. 예:
Cache::set('name', 1); // name自增(步进值为1) Cache::inc('name'); // name自增(步进值为3) Cache::inc('name',3);
숫자 또는 부동 소수점 데이터만 증가 및 감소할 수 있습니다.
캐시 자동 감소
숫자 유형 캐시 데이터의 경우 자동 감소 작업을 사용할 수 있습니다. 예:
// name自减(步进值为1) Cache::dec('name'); // name自减(步进值为3) Cache::dec('name',3);
캐시 가져오기
캐시 데이터를 가져오려면 다음을 사용할 수 있습니다.
Cache::get('name');
이름 값이 없으면 기본적으로 false를 반환합니다.
기본값 지정을 지원합니다. 예:
Cache::get('name','');
는 이름 값이 없으면 빈 문자열이 반환됨을 의미합니다.
캐시된 데이터 추가
캐시된 데이터가 배열인 경우 push 메소드를 통해 데이터를 추가할 수 있습니다.
Cache::set('name', [1,2,3]); Cache::push('name', 4); Cache::get('name'); // [1,2,3,4]
캐시 삭제
Cache::delete('name');
캐시 가져오기 및 삭제
Cache::pull('name');
이름 값이 없으면 null을 반환합니다.
캐시 지우기
Cache::clear();
없으면 캐시된 데이터를 쓰고
Cache::remember('start_time', time());
를 반환합니다. start_time 캐시된 데이터가 없으면 캐시된 데이터는 현재 시간으로 설정됩니다.
두 번째 매개변수는 클로저 메소드를 사용하여 캐시된 데이터를 얻을 수 있으며 종속성 주입을 지원합니다.
Cache::remember('start_time', function(Request $request){ return $request->time(); });
Remember 메소드의 세 번째 매개변수는 캐시 유효 기간을 설정할 수 있습니다.
캐시 태그
는 캐시 데이터 태그 지정을 지원합니다(예:
Cache::tag('tag')->set('name1','value1'); Cache::tag('tag')->set('name2','value2'); // 清除tag标签的缓存数据 Cache::tag('tag')->clear();
). 동시에 여러 캐시 태그 작업 지정을 지원합니다
Cache::tag(['tag1', 'tag2'])->set('name1', 'value1'); Cache::tag(['tag1', 'tag2'])->set('name2', 'value2'); // 清除多个标签的缓存数据 Cache::tag(['tag1','tag2'])->clear();
태그에 캐시를 추가할 수 있습니다
Cache::tag('tag')->append('name3');
캐시 개체 가져오기
예 캐시 개체를 얻고 드라이버 클래스의 상위 수준 메서드를 호출합니다. 예:
// 获取缓存对象句柄 $handler = Cache::handler();
Helper function
시스템은 캐싱 작업을 위한 보조 기능 캐시를 제공합니다.
$options = [ // 缓存类型为File 'type' => 'File', // 缓存有效期为永久有效 'expire' => 0, // 指定缓存目录 'path' => APP_PATH . 'runtime/cache/', ]; // 缓存初始化 // 不进行缓存初始化的话,默认使用配置文件中的缓存配置 $cache = cache($options); // 设置缓存数据 cache('name', $value, 3600); // 获取缓存数据 var_dump(cache('name')); // 删除缓存数据 cache('name', NULL);
교차 애플리케이션 캐시
기본적으로 파일 캐시 데이터는 여러 애플리케이션을 구분합니다. 애플리케이션 간에 데이터를 캐시하려는 경우 통합 데이터 캐시 경로 디렉터리를 설정할 수 있습니다.
캐시 유형 전환
캐시 유형을 지정하지 않으면 기본적으로 기본 캐시 구성을 읽어 동적으로 전환할 수 있습니다.
// 使用文件缓存 Cache::set('name','value',3600); Cache::get('name'); // 使用Redis缓存 Cache::store('redis')->set('name','value',3600); Cache::store('redis')->get('name'); // 切换到文件缓存 Cache::store('default')->set('name','value',3600); Cache::store('default')->get('name');
현재 캐시 유형 개체의 핸들을 반환하려면
를 사용할 수 있습니다.// 获取Redis对象 进行额外方法调用 Cache::store('redis')->handler();
동시에 여러 캐시 유형 사용
작업에 여러 캐시 유형을 동시에 사용하려는 경우 다음과 같이 구성할 수 있습니다.
return [ // 使用复合缓存类型 'type' => 'complex', // 默认使用的缓存 'default' => [ // 驱动方式 'type' => 'file', // 缓存保存目录 'path' => '../runtime/default', ], // 文件缓存 'file' => [ // 驱动方式 'type' => 'file', // 设置不同的缓存保存目录 'path' => '../runtime/file/', ], // redis缓存 'redis' => [ // 驱动方式 'type' => 'redis', // 服务器地址 'host' => '127.0.0.1', ], ],
유형을 복합으로 구성한 후 여러 캐시 유형을 캐시할 수 있습니다. 캐시 유형 및 캐시 구성 각 캐시 구성 방법은 이전과 동일하며 동일한 유형의 캐시에 대해 다른 캐시 구성 매개변수를 구성할 수 있습니다(다른 캐시 식별자 사용).
return [ // 缓存配置为复合类型 'type' => 'complex', 'default' => [ 'type' => 'file', // 全局缓存有效期(0为永久有效) 'expire'=> 0, // 缓存前缀 'prefix'=> 'think', // 缓存目录 'path' => '../runtime/cache/', ], 'redis' => [ 'type' => 'redis', 'host' => '127.0.0.1', // 全局缓存有效期(0为永久有效) 'expire'=> 0, // 缓存前缀 'prefix'=> 'think', ], // 添加更多的缓存类型设置 ];
캐시 유형을 지정하지 않으면 기본적으로 기본 캐시 구성을 읽습니다.
// 使用文件缓存 Cache::set('name','value',3600); Cache::get('name'); // 使用Redis缓存 Cache::store('redis')->set('name','value',3600); Cache::store('redis')->get('name'); // 切换到文件缓存 Cache::store('default')->set('name','value',3600); Cache::store('default')->get('name');
또 다른 방법은 connect 메소드를 호출하여 캐시를 동적으로 전환하는 것입니다.
$options = [ // 缓存类型为File 'type' => 'File', // 缓存有效期为永久有效 'expire'=> 0, //缓存前缀 'prefix'=> 'think', // 指定缓存目录 'path' => '../runtime/cache/', ]; Cache::connect($options)->set('name','value',3600); Cache::connect($options)->get('name');
현재 캐시 유형 객체의 핸들을 반환하려면
// 获取Redis对象 进行额外方法调用 Cache::store('redis')->handler();
custom 드라이버
를 사용하면 됩니다. 캐시 드라이버를 사용자 정의해야 하는 경우 thinkcacheDriver 클래스를 상속하고 thinkcontractCacheHandlerInterface 인터페이스를 구현해야 합니다. .
interface CacheHandlerInterface { /** * 判断缓存 * @access public * @param string $name 缓存变量名 * @return bool */ public function has($name): bool; /** * 读取缓存 * @access public * @param string $name 缓存变量名 * @param mixed $default 默认值 * @return mixed */ public function get($name, $default = false); /** * 写入缓存 * @access public * @param string $name 缓存变量名 * @param mixed $value 存储数据 * @param integer|\DateTime $expire 有效时间(秒) * @return bool */ public function set($name, $value, $expire = null): bool; /** * 自增缓存(针对数值缓存) * @access public * @param string $name 缓存变量名 * @param int $step 步长 * @return false|int */ public function inc(string $name, int $step = 1); /** * 自减缓存(针对数值缓存) * @access public * @param string $name 缓存变量名 * @param int $step 步长 * @return false|int */ public function dec(string $name, int $step = 1); /** * 删除缓存 * @access public * @param string $name 缓存变量名 * @return bool */ public function delete($name): bool; /** * 清除缓存 * @access public * @return bool */ public function clear(): bool; }