## æ¦è¿°
ThinkPHPéç¨`think\Cache`ç±»ï¼å®é
使ç¨`think\facade\Cache`ç±»å³å¯ï¼æä¾ç¼ååè½æ¯æã
å
ç½®æ¯æçç¼åç±»åå
æ¬fileãmemcacheãwincacheãsqliteãredisã
> ThinkPHPçç¼åç±»éµå¾ª`PSR-16`è§èã
## 设置
å
¨å±çç¼åé
ç½®ç´æ¥ä¿®æ¹é
ç½®ç®å½ä¸é¢ç`cache.php`æ件ã
æ°ççç¼åæ¯æå¤ééï¼ä½ å¯ä»¥äºå
å®ä¹å¥½ææçç¼åç±»ååé
ç½®åæ°ï¼ç¶åå¨ä½¿ç¨çæ¶åå¯ä»¥éæ¶åæ¢ãé»è®¤ä½¿ç¨çæ¯æ件ç¼åç±»åï¼ä½ å¯ä»¥æ·»å `redis`ç¼åæ¯æï¼ä¾å¦ï¼
~~~
return [
'default' => 'file',
'stores' => [
// æ件ç¼å
'file' => [
// 驱å¨æ¹å¼
'type' => 'file',
// 设置ä¸åçç¼åä¿åç®å½
'path' => '../runtime/file/',
],
// redisç¼å
'redis' => [
// 驱å¨æ¹å¼
'type' => 'redis',
// æå¡å¨å°å
'host' => '127.0.0.1',
],
],
];
~~~
ç¼ååæ°æ ¹æ®ä¸åçç¼åæ¹å¼ä¼ææåºå«ï¼éç¨çç¼ååæ°å¦ä¸ï¼
|åæ°|æè¿°|
|---|---|
|type |ç¼åç±»å|
|expire |ç¼åæææ ï¼é»è®¤ä¸º0 表示永ä¹
ç¼åï¼|
|prefix |ç¼ååç¼ï¼é»è®¤ä¸ºç©ºï¼|
|serialize |ç¼ååºåååååºååæ¹æ³|
>[danger] å¦ææ¯èªå®ä¹é©±å¨ï¼`type`çå¼å为èªå®ä¹é©±å¨çç±»åï¼å
å«å½å空é´ï¼
## 使ç¨
### 设置ç¼å
设置ç¼åæææ
~~~
// ç¼åå¨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');
~~~
å¦æ`name`å¼ä¸åå¨ï¼åé»è®¤è¿å `false`ã
æ¯ææå®é»è®¤å¼ï¼ä¾å¦ï¼
~~~
Cache::get('name','');
~~~
表示å¦æ`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');
~~~
å¦æ`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::get('name1');
```
并æ¯æåæ¶æå®å¤ä¸ªç¼åæ ç¾æä½
~~~
Cache::tag(['tag1', 'tag2'])->set('name1', 'value1');
Cache::tag(['tag1', 'tag2'])->set('name2', 'value2');
// æ¸
é¤å¤ä¸ªæ ç¾çç¼åæ°æ®
Cache::tag(['tag1','tag2'])->clear();
~~~
å¯ä»¥è¿½å æ个ç¼åæ è¯å°æ ç¾
```
Cache::tag('tag')->append('name3');
```
è·åæ ç¾çç¼åæ è¯å表
```
Cache::getTagItems('tag');
```
### è·åç¼å对象
å¯ä»¥è·åç¼å对象ï¼å¹¶ä¸è°ç¨é©±å¨ç±»çé«çº§æ¹æ³ï¼ä¾å¦ï¼
~~~
// è·åç¼å对象å¥æ
$handler = Cache::handler();
~~~
### å©æå½æ°
ç³»ç»å¯¹ç¼åæä½æä¾äºå©æå½æ°`cache`ï¼ç¨æ³å¦ä¸ï¼
~~~
// 设置ç¼åæ°æ®
cache('name', $value, 3600);
// è·åç¼åæ°æ®
var_dump(cache('name'));
// å é¤ç¼åæ°æ®
cache('name', NULL);
// è¿åç¼å对象å®ä¾
$cache = cache();
~~~
## è·¨åºç¨ç¼å
å¨å¤åºç¨æ¨¡å¼ä¸ï¼é»è®¤æ件ç¼åæ°æ®æ¯åºåä¸ååºç¨çï¼å¦æä½ å¸æç¼åè·¨åºç¨ï¼å¯ä»¥è®¾ç½®ä¸ä¸ªç»ä¸çæ°æ®ç¼å`path`ç®å½ã
## åæ¢ç¼åç±»å
没ææå®ç¼åç±»åçè¯ï¼é»è®¤è¯»åçæ¯`default`ç¼åé
ç½®ï¼å¯ä»¥å¨æåæ¢
~~~
// 使ç¨æ件ç¼å
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();
~~~
## èªå®ä¹é©±å¨
å¦æéè¦èªå®ä¹ç¼å驱å¨ï¼éè¦ç»§æ¿`think\cache\Driver`ç±»ï¼å¹¶ä¸å®ç°`think\contract\CacheHandlerInterface`æ¥å£ã
```
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;
}
```
使ç¨èªå®ä¹é©±å¨åï¼åªéè¦é
ç½®ç¼å`type`çå¼ä¸ºè¯¥é©±å¨ç±»åï¼å
å«å½å空é´ï¼å³å¯ã
- åºè¨
- åºç¡
- å®è£
- å¼åè§è
- ç®å½ç»æ
- é ç½®
- æ¶æ
- 请æ±æµç¨
- æ¶ææ»è§
- å ¥å£æ件
- å¤åºç¨æ¨¡å¼
- URL访é®
- 容å¨åä¾èµæ³¨å ¥
- æå¡
- é¨é¢
- ä¸é´ä»¶
- äºä»¶
- è·¯ç±
- è·¯ç±å®ä¹
- åéè§å
- è·¯ç±å°å
- è·¯ç±åæ°
- è·¯ç±ä¸é´ä»¶
- è·¯ç±åç»
- èµæºè·¯ç±
- 注解路ç±
- è·¯ç±ç»å®
- ååè·¯ç±
- MISSè·¯ç±
- è·¨å请æ±
- URLçæ
- æ§å¶å¨
- æ§å¶å¨å®ä¹
- åºç¡æ§å¶å¨
- 空æ§å¶å¨
- èµæºæ§å¶å¨
- æ§å¶å¨ä¸é´ä»¶
- 请æ±
- 请æ±å¯¹è±¡
- 请æ±ä¿¡æ¯
- è¾å ¥åé
- 请æ±ç±»å
- HTTP头信æ¯
- 伪éæ
- åæ°ç»å®
- 请æ±ç¼å
- ååº
- ååºè¾åº
- ååºåæ°
- éå®å
- æ件ä¸è½½
- æ°æ®åº
- è¿æ¥æ°æ®åº
- åå¸å¼æ°æ®åº
- æ¥è¯¢æé å¨
- æ¥è¯¢æ°æ®
- æ·»å æ°æ®
- æ´æ°æ°æ®
- å é¤æ°æ®
- æ¥è¯¢è¡¨è¾¾å¼
- é¾å¼æä½
- where
- table
- alias
- field
- strict
- limit
- page
- order
- group
- having
- join
- union
- distinct
- lock
- cache
- comment
- fetchSql
- force
- partition
- failException
- sequence
- replace
- extra
- duplicate
- procedure
- èåæ¥è¯¢
- å页æ¥è¯¢
- æ¶é´æ¥è¯¢
- é«çº§æ¥è¯¢
- è§å¾æ¥è¯¢
- JSONå段
- åæ¥è¯¢
- åçæ¥è¯¢
- æ¥è¯¢äºä»¶
- è·åå¨
- äºå¡æä½
- åå¨è¿ç¨
- æ°æ®é
- æ°æ®åºé©±å¨
- 模å
- å®ä¹
- 模åå段
- æ°å¢
- æ´æ°
- å é¤
- æ¥è¯¢
- æ¥è¯¢èå´
- JSONå段
- è·åå¨
- ä¿®æ¹å¨
- æç´¢å¨
- æ°æ®é
- èªå¨æ¶é´æ³
- åªè¯»å段
- 软å é¤
- ç±»å转æ¢
- 模åè¾åº
- 模åäºä»¶
- 模åå ³è
- ä¸å¯¹ä¸å ³è
- ä¸å¯¹å¤å ³è
- è¿ç¨ä¸å¯¹å¤
- è¿ç¨ä¸å¯¹ä¸
- å¤å¯¹å¤å ³è
- å¤æå ³è
- å ³èé¢è½½å ¥
- å ³èç»è®¡
- å ³èè¾åº
- è§å¾
- 模æ¿åé
- è§å¾è¿æ»¤
- 模æ¿æ¸²æ
- 模æ¿å¼æ
- è§å¾é©±å¨
- é误åæ¥å¿
- å¼å¸¸å¤ç
- æ¥å¿å¤ç
- è°è¯
- è°è¯æ¨¡å¼
- Traceè°è¯
- SQLè°è¯
- åéè°è¯
- è¿ç¨è°è¯
- éªè¯
- éªè¯å¨
- éªè¯è§å
- é误信æ¯
- éªè¯åºæ¯
- è·¯ç±éªè¯
- å ç½®è§å
- 表å令ç
- 注解éªè¯
- æ项
- ç¼å
- Session
- Cookie
- å¤è¯è¨
- ä¸ä¼
- å½ä»¤è¡
- å¯å¨å ç½®æå¡å¨
- æ¥ççæ¬
- èªå¨çæåºç¨ç®å½
- å建类åºæ件
- æ¸ é¤ç¼åæ件
- çææ°æ®è¡¨å段ç¼å
- çæè·¯ç±æ å°ç¼å
- è¾åºè·¯ç±å®ä¹
- èªå®ä¹æ令
- æ©å±åº
- æ°æ®åºè¿ç§»å·¥å ·
- Workerman
- thinkå©æå·¥å ·åº
- éªè¯ç
- Swoole
- éå½
- å©æå½æ°
- å级æ导
- æ´æ°æ¥å¿