Cache konfigurieren
So legen Sie den Cache fest
Globale Cache-Konfiguration ändert die Konfiguration direkt Cache.php-Datei im Verzeichnis.
ThinkPHP verwendet die thinkCache-Klasse (eigentlich nur die thinkfacadeCache-Klasse), um Caching-Funktionsunterstützung bereitzustellen. Zu den integrierten unterstützten Cache-Typen gehören Datei, Memcache, Wincache, SQLite und Redis. Die Caching-Klasse von ThinkPHP folgt den Spezifikationen PSR-6 und PSR-16. Aufgrund der besonderen Natur von Modell- und Datensatzobjekten (einschließlich PDOStatement-Objekten) unterstützt Caching das Caching von Modell- und Datensatzobjekten nicht.
Die neue Cache-Version unterstützt Multichannel. Sie können alle Cache-Typen und Konfigurationsparameter im Voraus definieren und dann bei der Verwendung jederzeit wechseln. Der Datei-Cache-Typ wird standardmäßig verwendet. Sie können Redis-Cache-Unterstützung hinzufügen, zum Beispiel:
return [ 'default' => 'file', 'stores' => [ // 文件缓存 'file' => [ // 驱动方式 'type' => 'file', // 设置不同的缓存保存目录 'path' => '../runtime/file/', ], // redis缓存 'redis' => [ // 驱动方式 'type' => 'redis', // 服务器地址 'host' => '127.0.0.1', ], ], ];
Wenn Ihre Anwendung nur einen Cache-Typ verwenden muss, können Sie ihn direkt konfigurieren und das System wird ihn automatisch initialisieren.
return [ // 缓存类型为File 'type' => 'file', // 全局缓存有效期(0为永久有效) 'expire'=> 0, // 缓存前缀 'prefix'=> 'think', // 缓存目录 'path' => '../runtime/cache/', ];
Cache-Parameter unterscheiden sich je nach Caching-Methode. Die allgemeinen Cache-Parameter lauten wie folgt:
参数 | 描述 |
---|---|
type | 缓存类型 |
expire | 缓存有效期 (默认为0 表示永久缓存) |
prefix | 缓存前缀(默认为空) |
serialize | 缓存序列化和反序列化方法 |
Verwenden Sie
, um den Cache festzulegen
Legen Sie den Cache-Gültigkeitszeitraum fest
// 缓存在3600秒之后过期 Cache::set('name', $value, 3600);
Sie können das DateTime-Objekt verwenden, um die festzulegen Ablaufzeit
Cache::set('name', $value, new DateTime('2019-10-01 12:00:00'));
Gibt true zurück, wenn die Einstellung erfolgreich ist, andernfalls false.
Automatische Cache-Inkrementierung
Für zwischengespeicherte Daten vom numerischen Typ können Sie die automatische Inkrementierungsoperation verwenden, zum Beispiel:
Cache::set('name', 1); // name自增(步进值为1) Cache::inc('name'); // name自增(步进值为3) Cache::inc('name',3);
Nur für Zahlen oder Float-Daten können inkrementiert und dekrementiert werden.
Cache-Dekrementierung
Für zwischengespeicherte Daten numerischer Art können Sie die Dekrementierungsoperation verwenden, zum Beispiel:
// name自减(步进值为1) Cache::dec('name'); // name自减(步进值为3) Cache::dec('name',3);
Cache abrufen
Um Cache-Daten abzurufen, können Sie Folgendes verwenden:
Cache::get('name');
Wenn der Namenswert nicht vorhanden ist, wird standardmäßig false zurückgegeben.
unterstützt die Angabe von Standardwerten, zum Beispiel:
Cache::get('name','');
bedeutet, dass eine leere Zeichenfolge zurückgegeben wird, wenn der Namenswert nicht vorhanden ist.
Zwischengespeicherte Daten anhängen
Wenn es sich bei den zwischengespeicherten Daten um ein Array handelt, können Sie Daten über die Push-Methode anhängen.
Cache::set('name', [1,2,3]); Cache::push('name', 4); Cache::get('name'); // [1,2,3,4]
Cache löschen
Cache::delete('name');
Cache abrufen und löschen
Cache::pull('name');
Gibt null zurück, wenn der Namenswert nicht existiert.
Cache leeren
Cache::clear();
ist nicht vorhanden, zwischengespeicherte Daten schreiben und zurückgeben
Cache::remember('start_time', time());
Wenn start_time Cache-Daten Wenn es nicht vorhanden ist, werden die zwischengespeicherten Daten auf die aktuelle Zeit gesetzt.
Der zweite Parameter kann die Schließungsmethode verwenden, um zwischengespeicherte Daten abzurufen, und unterstützt die Abhängigkeitsinjektion. Der dritte Parameter der
Cache::remember('start_time', function(Request $request){ return $request->time(); });
remember-Methode kann den Cache-Gültigkeitszeitraum festlegen.
Cache-Tag
Unterstützt das Markieren von Cache-Daten, zum Beispiel:
Cache::tag('tag')->set('name1','value1'); Cache::tag('tag')->set('name2','value2'); // 清除tag标签的缓存数据 Cache::tag('tag')->clear();
und unterstützt die gleichzeitige Angabe mehrerer Cache-Tag-Vorgänge
Cache::tag(['tag1', 'tag2'])->set('name1', 'value1'); Cache::tag(['tag1', 'tag2'])->set('name2', 'value2'); // 清除多个标签的缓存数据 Cache::tag(['tag1','tag2'])->clear();
kann einen Cache an das Tag anhängen
Cache::tag('tag')->append('name3');
das Cache-Objekt abrufen
kann das Cache-Objekt abrufen und die erweiterte Methode der Treiberklasse aufrufen , zum Beispiel:
// 获取缓存对象句柄 $handler = Cache::handler();
Assistenzfunktion
Das System stellt den Assistentenfunktions-Cache für Caching-Vorgänge bereit. Die Verwendung ist wie folgt:
$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);
Anwendungsübergreifendes Caching
Standardmäßig werden Datei-Cache-Daten zwischen verschiedenen Anwendungen unterschieden. Wenn Sie anwendungsübergreifend zwischenspeichern möchten, können Sie ein einheitliches Daten-Cache-Pfadverzeichnis festlegen.
Cache-Typ wechseln
Wenn der Cache-Typ nicht angegeben ist, wird standardmäßig die Standard-Cache-Konfiguration gelesen und kann dynamisch umgeschaltet werden
// 使用文件缓存 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');
Wenn Sie das Handle des aktuellen Cache-Typ-Objekts zurückgeben möchten, können Sie
// 获取Redis对象 进行额外方法调用 Cache::store('redis')->handler();
Mehrere Cache-Typen gleichzeitig verwenden
Wenn Sie wollen Wenn Sie mehrere Cache-Typen gleichzeitig für Vorgänge verwenden, können Sie Folgendes konfigurieren:
return [ // 使用复合缓存类型 'type' => 'complex', // 默认使用的缓存 'default' => [ // 驱动方式 'type' => 'file', // 缓存保存目录 'path' => '../runtime/default', ], // 文件缓存 'file' => [ // 驱动方式 'type' => 'file', // 设置不同的缓存保存目录 'path' => '../runtime/file/', ], // redis缓存 'redis' => [ // 驱动方式 'type' => 'redis', // 服务器地址 'host' => '127.0.0.1', ], ],
Nachdem der Typ als komplex konfiguriert wurde, können Sie mehrere Cache-Typen und Cache-Konfigurationen zwischenspeichern. Die Methode jeder Cache-Konfiguration ist das Gleiche wie zuvor, und Sie können verschiedene Cache-Konfigurationsparameter für denselben Cache-Typ konfigurieren (unter Verwendung unterschiedlicher Cache-IDs).
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', ], // 添加更多的缓存类型设置 ];
Wenn der Cache-Typ nicht angegeben ist, wird standardmäßig die Standard-Cache-Konfiguration gelesen
// 使用文件缓存 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');
Eine andere Möglichkeit besteht darin, die Verbindungsmethode aufzurufen, um Caches dynamisch zu wechseln.
$options = [ // 缓存类型为File 'type' => 'File', // 缓存有效期为永久有效 'expire'=> 0, //缓存前缀 'prefix'=> 'think', // 指定缓存目录 'path' => '../runtime/cache/', ]; Cache::connect($options)->set('name','value',3600); Cache::connect($options)->get('name');
Wenn Sie das Handle des aktuellen Cache-Typ-Objekts zurückgeben möchten, können Sie
// 获取Redis对象 进行额外方法调用 Cache::store('redis')->handler();
Benutzerdefinierter Treiber
Wenn Sie eine Anpassung benötigen Als Cache-Treiber müssen Sie die Klasse thinkcacheDriver erben und die Schnittstelle thinkcontractCacheHandlerInterface implementieren.
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; }