Configurer le cache
Comment configurer le cache
Pour la configuration globale du cache, modifiez directement le fichier cache.php sous le répertoire de configuration.
ThinkPHP utilise la classe thinkCache (en fait, utilisez simplement la classe thinkfacadeCache) pour fournir la prise en charge de la fonction de mise en cache. Les types de cache intégrés pris en charge incluent file, memcache, wincache, sqlite et redis. La classe de mise en cache de ThinkPHP suit les spécifications PSR-6 et PSR-16. En raison de la nature particulière des objets de modèle et d'ensemble de données (y compris les objets PDOStatement), la mise en cache ne prend pas en charge la mise en cache des objets de modèle et d'ensemble de données.
La nouvelle version du cache prend en charge le multicanal. Vous pouvez définir tous les types de cache et paramètres de configuration à l'avance, puis basculer à tout moment lorsque vous les utilisez. Le type de cache de fichiers est utilisé par défaut. Vous pouvez ajouter la prise en charge du cache Redis, par exemple :
return [ 'default' => 'file', 'stores' => [ // 文件缓存 'file' => [ // 驱动方式 'type' => 'file', // 设置不同的缓存保存目录 'path' => '../runtime/file/', ], // redis缓存 'redis' => [ // 驱动方式 'type' => 'redis', // 服务器地址 'host' => '127.0.0.1', ], ], ];
Si votre application n'a besoin d'utiliser qu'un seul type de cache, vous pouvez le configurer directement et le système l'initialisera automatiquement.
return [ // 缓存类型为File 'type' => 'file', // 全局缓存有效期(0为永久有效) 'expire'=> 0, // 缓存前缀 'prefix'=> 'think', // 缓存目录 'path' => '../runtime/cache/', ];
Les paramètres du cache diffèrent selon les différentes méthodes de mise en cache. Les paramètres généraux du cache sont les suivants :
Paramètre | Description |
---|---|
type | Type de cache |
expire. | Validité du cache période (par défaut 0 signifie cache permanent) |
prefix | préfixe du cache (vide par défaut) |
serialize | méthodes de sérialisation et de désérialisation du cache |
Utilisez
pour définir le cache
Définissez la période de validité du cache
// 缓存在3600秒之后过期 Cache::set('name', $value, 3600);
Vous pouvez utiliser l'objet DateTime pour définir l'heure d'expiration
Cache::set('name', $value, new DateTime('2019-10-01 12:00:00'));
Si le réglage est réussi, renvoyez vrai, sinon renvoyez faux.
Incrémentation automatique du cache
Pour les données mises en cache de type numérique, vous pouvez utiliser l'opération d'incrémentation automatique, par exemple :
Cache::set('name', 1); // name自增(步进值为1) Cache::inc('name'); // name自增(步进值为3) Cache::inc('name',3);
Seules les données numériques ou à virgule flottante peuvent être incrémentées et décrémentées.
Décrémentation automatique du cache
Pour les données de cache de type numérique, vous pouvez utiliser l'opération de décrémentation automatique, par exemple :
// name自减(步进值为1) Cache::dec('name'); // name自减(步进值为3) Cache::dec('name',3);
Obtenir le cache
Pour obtenir les données du cache, vous pouvez utiliser :
Cache::get('name');
Si la valeur du nom n'existe pas, renvoie false par défaut.
Prend en charge la spécification de valeurs par défaut, par exemple :
Cache::get('name','');
signifie que si la valeur du nom n'existe pas, une chaîne vide sera renvoyée.
Ajouter des données mises en cache
Si les données mises en cache sont un tableau, vous pouvez ajouter des données via la méthode push.
Cache::set('name', [1,2,3]); Cache::push('name', 4); Cache::get('name'); // [1,2,3,4]
Supprimer le cache
Cache::delete('name');
Obtenir et supprimer le cache
Cache::pull('name');
Renvoie null si la valeur du nom n'existe pas.
Vider le cache
Cache::clear();
Si elle n'existe pas, écrivez les données mises en cache et renvoyez
Cache::remember('start_time', time());
Si les données mises en cache start_time n'existent pas, les données mises en cache seront définies sur l'heure actuelle.
Le deuxième paramètre peut utiliser la méthode de fermeture pour obtenir des données mises en cache et prend en charge l'injection de dépendances.
Cache::remember('start_time', function(Request $request){ return $request->time(); });
Le troisième paramètre de la méthode Remember peut définir la période de validité du cache.
Cache tag
prend en charge le balisage des données de cache, par exemple :
Cache::tag('tag')->set('name1','value1'); Cache::tag('tag')->set('name2','value2'); // 清除tag标签的缓存数据 Cache::tag('tag')->clear();
et prend en charge la spécification de plusieurs opérations de balise de cache en même temps
Cache::tag(['tag1', 'tag2'])->set('name1', 'value1'); Cache::tag(['tag1', 'tag2'])->set('name2', 'value2'); // 清除多个标签的缓存数据 Cache::tag(['tag1','tag2'])->clear();
Vous pouvez ajouter un cache à la balise
Cache::tag('tag')->append('name3');
Obtenir l'objet de cache
Oui Obtenez l'objet cache et appelez les méthodes de haut niveau de la classe pilote, par exemple :
// 获取缓存对象句柄 $handler = Cache::handler();
Fonction d'assistance
Le système fournit la fonction assistant cache pour les opérations de mise en cache. L'utilisation est la suivante :
$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 inter-applications
Par défaut, les données du cache de fichiers distinguent différentes applications. Si vous souhaitez mettre en cache des données entre applications, vous pouvez définir un répertoire de chemin de cache de données unifié.
Changer de type de cache
Si le type de cache n'est pas spécifié, la configuration du cache par défaut est lue par défaut, qui peut être commutée dynamiquement
// 使用文件缓存 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');
Si vous souhaitez renvoyer le handle de l'objet de type de cache actuel, vous pouvez utiliser
// 获取Redis对象 进行额外方法调用 Cache::store('redis')->handler();
Utilisez plusieurs types de cache en même temps
Si vous souhaitez utiliser plusieurs types de cache pour les opérations en même temps, vous pouvez le configurer comme suit :
return [ // 使用复合缓存类型 'type' => 'complex', // 默认使用的缓存 'default' => [ // 驱动方式 'type' => 'file', // 缓存保存目录 'path' => '../runtime/default', ], // 文件缓存 'file' => [ // 驱动方式 'type' => 'file', // 设置不同的缓存保存目录 'path' => '../runtime/file/', ], // redis缓存 'redis' => [ // 驱动方式 'type' => 'redis', // 服务器地址 'host' => '127.0.0.1', ], ],
Une fois le type configuré comme complexe, vous pouvez mettre en cache plusieurs types de cache et configurations de cache. La méthode de configuration de chaque cache est la même que précédemment et vous pouvez configurer différents paramètres de configuration de cache pour le même type de cache (en utilisant différents identifiants de cache).
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', ], // 添加更多的缓存类型设置 ];
Si le type de cache n'est pas spécifié, la configuration du cache par défaut est lue par défaut
// 使用文件缓存 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');
Une autre façon consiste à appeler la méthode connect pour changer dynamiquement de cache.
$options = [ // 缓存类型为File 'type' => 'File', // 缓存有效期为永久有效 'expire'=> 0, //缓存前缀 'prefix'=> 'think', // 指定缓存目录 'path' => '../runtime/cache/', ]; Cache::connect($options)->set('name','value',3600); Cache::connect($options)->get('name');
Si vous souhaitez renvoyer le handle de l'objet de type de cache actuel, vous pouvez utiliser
// 获取Redis对象 进行额外方法调用 Cache::store('redis')->handler();
custom driver
Si vous devez personnaliser le pilote de cache, vous devez hériter de la classe thinkcacheDriver et implémenter l'interface 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; }