système de mise en cache


Système de mise en cache

Configuration

Laravel fournit un API riche et unifiée pour divers caches backend et ses informations de configuration se trouve dans le fichier config/cache.php. Dans ce fichier, vous pouvez spécifier le pilote de cache que l'application utilise par défaut. Laravel prend en charge les caches backend populaires tels que Memcachedconfig/cache.php 文件中。在该文件中你可以指定应用默认使用哪个缓存驱动。Laravel 支持当前流行的后端缓存,例如 MemcachedRedis

缓存配置文件还包含各种其他选项,这些选项都记录在文件中,因此请确保阅读这些选项。默认情况下,Laravel 配置为使用 file et Redis

.

Le fichier de configuration du cache contient également diverses autres options, qui sont documentées dans le fichier, alors assurez-vous de les lire. Par défaut, Laravel est configuré pour utiliser le pilote de cache file, qui stocke les objets de cache sérialisés dans le système de fichiers. Pour les applications plus volumineuses, il est recommandé d'utiliser un pilote plus puissant tel que Memcached ou Redis. Vous pouvez même configurer plusieurs configurations de cache pour le même pilote.

Prérequis pour conduire🎜🎜🎜

Base de données

Lorsque vous utilisez le pilote de cache database, vous devez configurer une table pour stocker les données du cache. Voici un exemple de déclaration Schema pour créer une structure de table de données de cache : database 缓存驱动时,你需要配置一个表来存放缓存数据。下面是构建缓存数据表结构的 Schema 声明示例:

Schema::create('cache', function ($table) {
    $table->string('key')->unique();    
    $table->text('value');    
    $table->integer('expiration');
});

{tip} 你也可以使用 Artisan 命令 php artisan cache:table 来生成合适的迁移。

Memcached

使用 Memcached 驱动需要安装 Memcached PECL 扩展包 。你可以把所有的 Memcached 服务器都列在 config/cache.php 配置文件中:

'memcached' => [ 
   [       
    'host' => '127.0.0.1',        
    'port' => 11211,        
    'weight' => 100    
   ],
 ],

你可以将 host 选项设置为 UNIX socket 路径。如果你这样配置了, port 选项应该设置为 0

'memcached' => [ 
   [      
     'host' => '/var/run/memcached/memcached.sock',        
     'port' => 0,        
     'weight' => 100   
    ],
],

Redis

在使用 Laravel 的 Redis 缓存之前,你需要通过 Composer 安装 predis/predis 扩展包 (~1.0) 或者使用 PECL 安装 PhpRedis PHP 扩展。

如需了解更多关于 Redis 的配置,请参考 Laravel Redis 文档。

缓存的使用

获取缓存实例

IlluminateContractsCacheFactoryIlluminateContractsCacheRepository 契约 提供了 Laravel 缓存服务的访问机制。 Factory 契约为你的应用程序定义了访问所有缓存驱动的机制。 Repository 契约通常是由你的 cache 配置文件指定的默认缓存驱动实现的。

不过,你也可以使用 Cache Facade,我们将在后续的文档中介绍。 Cache Facade 为 Laravel 缓存契约底层的实现提供了方便又简洁的方法:

<?php
    namespace App\Http\Controllers;
    use Illuminate\Support\Facades\Cache;
    class UserController extends Controller{   
     /**
     * 展示应用的所有用户列表。
     *
     * @return Response
     */ 
      public function index() 
         {     
            $value = Cache::get('key');    
                //  
          }
     }

访问多个缓存存储

使用 Cache Facade,你可以通过 store 方法来访问各种缓存存储。传入 store 方法的键应该对应 cache 配置信息文件中的 stores

$value = Cache::store('file')->get('foo');
Cache::store('redis')->put('bar', 'baz', 600); 
// 10 分钟

{tip} Vous pouvez également utiliser la commande Artisan php artisan cache:table pour générer la migration appropriée.

Memcached

L'utilisation du pilote Memcached nécessite une installation Package d'extension Memcached PECL
. Vous pouvez lister tous les serveurs Memcached dans le fichier de configuration config/cache.php : 🎜
$value = Cache::get('key');
$value = Cache::get('key', 'default');
🎜 Vous pouvez définir l'option host sur le chemin du socket UNIX. Si vous le configurez de cette façon, l'option port doit être définie sur 0 : 🎜
$value = Cache::get('key', function () {
    return DB::table(...)->get();
 });
🎜🎜Redis 🎜🎜 dans Avant d'utiliser le cache Redis de Laravel, vous devez installer le package d'extension predis/predis (~1.0) via Composer ou utiliser PECL pour installer l'extension PHP PhpRedis. 🎜🎜Pour en savoir plus sur la configuration de Redis, veuillez vous référer à la documentation de Laravel Redis. 🎜🎜🎜🎜
🎜

Utilisation du cache

🎜
🎜🎜
🎜

Obtenir une instance de cache

🎜IlluminateContractsCacheFactory et IlluminateContractsCacheRepository Le contrat fournit le mécanisme d'accès au service de cache de Laravel. Le contrat Factory définit le mécanisme permettant à votre application d'accéder à tous les pilotes de cache. Le contrat Repository est généralement implémenté par le pilote de cache par défaut spécifié dans votre fichier de configuration cache. 🎜🎜Cependant, vous pouvez également utiliser la façade Cache, que nous présenterons dans les documents ultérieurs. Cache Facade fournit une méthode pratique et concise pour l'implémentation sous-jacente du contrat de cache Laravel : 🎜
if (Cache::has('key')) { 
   //
}
🎜🎜Accédez à plusieurs magasins de cache🎜🎜 Utilisation la façade Cache, vous pouvez accéder à différents magasins de cache via la méthode store. La clé passée dans la méthode store doit correspondre à l'un des magasins répertoriés dans le tableau de configuration stores dans le fichier d'informations de configuration cache : 🎜
Cache::increment('key');
Cache::increment('key', $amount);
Cache::decrement('key');
Cache::decrement('key', $amount);
🎜🎜 🎜🎜🎜🎜

Obtenir des données du cache

Cache La méthode get de Facade est la méthode utilisée pour obtenir des données du cache. Si les données n'existent pas dans le cache, la méthode retournera null . Comme vous pouvez l'imaginer, vous pouvez également passer un deuxième paramètre à la méthode get, qui spécifie la valeur par défaut que vous souhaitez renvoyer si les données recherchées n'existent pas : Cache Facade 的 get 方法是用来从缓存中获取数据的方法。如果该数据在缓存中不存在,那么该方法将返回 null 。正如你想的那样,你也可以向  get 方法传递第二个参数,用来指定如果查找的数据不存在时你希望返回的默认值:

$value = Cache::remember('users', $seconds, function () {
    return DB::table('users')->get();
 });

你甚至可以传递 Closure 作为默认值。如果指定的数据在缓存中不存在,将返回 Closure 的结果。传递闭包的方法允许你从数据库或其他外部服务中获取默认值:

$value = Cache::rememberForever('users', function () {
    return DB::table('users')->get();
});

检查缓存项是否存在

has 方法可以用于判断缓存项是否存在。如果为 nullfalse 则该方法将会返回 false

$value = Cache::pull('key');

递增与递减值

incrementdecrement 方法可以用来调整缓存中整数项的值。这两个方法都可以传入第二个可选参数,这个参数用来指明要递增或递减的数量:

Cache::put('key', 'value', $seconds);

获取和存储

有时你可能想从缓存中获取一个数据,而当请求的缓存项不存在时,程序能为你存储一个默认值。例如,你可能想从缓存中获取所有用户,当缓存中不存在这些用户时,程序将从数据库将这些用户取出并放入缓存。你可以使用 Cache::remember 方法来实现:

Cache::put('key', 'value');

如果缓存中不存在你想要的数据时,则传递给 remember 方法的 闭包 将被执行,然后将其结果返回并放置到缓存中。

你可以使用 rememberForever 方法从缓存中获取数据或者永久存储它:

Cache::put('key', 'value', now()->addMinutes(10));

获取和删除

如果你需要从缓存中获取到数据之后再删除它,你可以使用 pull 方法。和 get 方法一样,如果缓存不存在,则返回 null

Cache::add('key', 'value', $seconds);

在缓存中存储数据

你可以使用 Cache Facade 的 put 方法将数据存储到缓存中:

Cache::forever('key', 'value');

如果缓存的过期时间没有传递给 put 方法, 则缓存将永久有效:

Cache::forget('key');

除了以整数形式传递过期时间的秒数,你还可以传递一个 DateTime 实例来表示该数据的过期时间:

Cache::put('key', 'value', 0);
Cache::put('key', 'value', -5);

只存储没有的数据

add 方法将只存储缓存中不存在的数据。如果存储成功,将返回 true ,否则返回 false

Cache::flush();

Vous pouvez même passer < code>Fermeture
comme valeur par défaut. Si les données spécifiées n'existent pas dans le cache, le résultat de Closure sera renvoyé. Passer une méthode de fermeture vous permet d'obtenir la valeur par défaut d'une base de données ou d'un autre service externe :
use Illuminate\Support\Facades\Cache;
$lock = Cache::lock('foo', 10);
if ($lock->get()) {
    //获取锁定10秒...    
    $lock->release();
}

Vérifier si l'élément mis en cache existe

🎜 < La méthode code>has peut être utilisée pour déterminer si l'élément de cache existe. S'il est null ou false, cette méthode retournera false : 🎜
Cache::lock('foo')->get(function () {
    // 获取无限期锁并自动释放...
});
🎜

Incrémenter et décrémenter les valeurs

🎜Les méthodes increment et decrement peuvent être utilisées pour ajuster la valeur des éléments entiers dans le cache. Les deux méthodes peuvent transmettre un deuxième paramètre facultatif, qui est utilisé pour spécifier le montant à incrémenter ou décrémenter : 🎜
use Illuminate\Contracts\Cache\LockTimeoutException;
$lock = Cache::lock('foo', 10);try {
    $lock->block(5);    
    // 等待最多5秒后获取的锁...
   } catch (LockTimeoutException $e) {
       // 无法获取锁...
   } finally {
       optional($lock)->release();
   }
Cache::lock('foo', 10)->block(5, function () {
    // 等待最多5秒后获取的锁...
   });
🎜

Obtenir la somme de stockage🎜Parfois, vous souhaiterez peut-être obtenir des données du cache, et lorsque l'élément de cache demandé n'existe pas, le programme peut stocker une valeur par défaut pour vous. Par exemple, vous souhaiterez peut-être extraire tous les utilisateurs du cache. Lorsque ces utilisateurs n'existent pas dans le cache, le programme les récupérera dans la base de données et les placera dans le cache. Vous pouvez utiliser la méthode Cache::remember pour y parvenir : 🎜
// 控制器里面...
$podcast = Podcast::find($id);
if ($lock = Cache::lock('foo', 120)->get()) {
    ProcessPodcast::dispatch($podcast, $lock->owner());
    }
// ProcessPodcast Job 里面...
Cache::restoreLock('foo', $this->owner)->release();
🎜Si la donnée souhaitée n'existe pas dans le cache, passez-la à la fermeture du remember< Méthode /code> Le package sera exécuté et ses résultats seront renvoyés et placés dans le cache. 🎜🎜Vous pouvez utiliser la méthode rememberForever pour récupérer les données du cache ou les stocker de manière permanente : 🎜
Cache::lock('foo')->forceRelease();
🎜

Get et delete🎜Si vous avez besoin d'extraire des données du cache puis de les supprimer, vous pouvez utiliser la méthode pull. Comme la méthode get, si le cache n'existe pas, null est renvoyé : 🎜
$value = cache('key');
🎜< /a >🎜
🎜🎜Stocker les données dans le cache🎜🎜Vous pouvez utiliser la méthode put du Cache Façade pour mettre le data Store dans le cache : 🎜
cache(['key' => 'value'], $seconds);
cache(['key' => 'value'], now()->addMinutes(10));
🎜 Si le délai d'expiration mis en cache n'est pas transmis à la méthode put, le cache sera valide pour toujours : 🎜
cache()->remember('users', $seconds, function () {
    return DB::table('users')->get();
 });
🎜En plus de passer l'expiration time en secondes sous forme d'entier, vous pouvez également passer une instance DateTime pour représenter l'heure d'expiration des données : 🎜
Cache::tags(['people', 'artists'])->put('John', $john, $seconds);
Cache::tags(['people', 'authors'])->put('Anne', $anne, $seconds);
🎜

Stocker uniquement les données qui n'existent pas

🎜< La méthode code>add
stockera uniquement les données qui n'existent pas dans le cache. Si le stockage réussit, true sera renvoyé, sinon false sera renvoyé : 🎜
$john = Cache::tags(['people', 'artists'])->get('John');
$anne = Cache::tags(['people', 'authors'])->get('Anne');
🎜🎜La méthode

Stockage permanent des données

forever peut être utilisée pour stocker de manière persistante des données dans le cache. Parce que ces données n'expireront pas, elles doivent être supprimées manuellement du cache via la méthode forget : forever 方法可用于持久化将数据存储到缓存中。因为这些数据不会过期,所以必须通过 forget 方法从缓存中手动删除它们:

Cache::tags(['people', 'authors'])->flush();

{tip} 如果你使用 Memcached 驱动,当缓存数据达到存储上限时,「永久存储」 的数据可能会被删除。

删除缓存中的数据

你可以使用 forget 方法从缓存中删除这些数据:

Cache::tags('authors')->flush();

你也可以通过提供零或者负的 TTL 值删除这些数据:

<?php
    namespace App\Extensions;
    use Illuminate\Contracts\Cache\Store;
    class MongoStore implements Store{ 
       public function get($key) {}    
       public function many(array $keys);    
       public function put($key, $value, $seconds) {}    
       public function putMany(array $values, $seconds);    
       public function increment($key, $value = 1) {}    
       public function decrement($key, $value = 1) {}    
       public function forever($key, $value) {}    
       public function forget($key) {}    
       public function flush() {}    
       public function getPrefix() {}
    }

你可以使用 flush 方法清空所有的缓存:

Cache::extend('mongo', function ($app) {
    return Cache::repository(new MongoStore);
  });

{note} 清空缓存的方法并不会考虑缓存前缀,会将缓存中的所有内容删除。因此在清除与其它应用程序共享的缓存时,请慎重考虑。

原子锁

{note} 要使用该特性,你的应用必须使用 memcacheddynamodbredis 缓存驱动作为你应用的默认缓存驱动。此外,所有服务器必须与同一中央缓存服务器进行通信。

原子锁允许对分布式锁进行操作而不必担心竞争条件。例如, Laravel Forge 使用原子锁来确保在一台服务器上每次只有一个远程任务在执行。你可以使用 Cache::lock 方法来创建和管理锁:

<?php
    namespace App\Providers;use App\Extensions\MongoStore;
    use Illuminate\Support\Facades\Cache;
    use Illuminate\Support\ServiceProvider;
    class CacheServiceProvider extends ServiceProvider{   
     /**
     * 执行服务的注册后引导。
     *
     * @return void
     */   
       public function boot()   
        {      
          Cache::extend('mongo', function ($app) {     
                 return Cache::repository(new MongoStore);        
             });   
          }   
     /**
     * 在容器中注册绑定。
     *
     * @return void
     */    
     public function register()   
      {      
        //   
       }
    }

get 方法也可以接收一个闭包。在闭包执行之后,Laravel 将会自动释放锁:

/**
 * 应用的事件监听器映射
 *
 * @var array
 */
 protected $listen = [
     'Illuminate\Cache\Events\CacheHit' => [   
          'App\Listeners\LogCacheHit',   
         ],    
     'Illuminate\Cache\Events\CacheMissed' => [     
        'App\Listeners\LogCacheMissed',  
         ],    
     'Illuminate\Cache\Events\KeyForgotten' => [    
         'App\Listeners\LogKeyForgotten',  
          ],   
      'Illuminate\Cache\Events\KeyWritten' => [ 
          'App\Listeners\LogKeyWritten', 
           ],
        ];

如果你在请求时锁无法使用,你可以控制 Laravel 等待指定的秒数。如果在指定的时间限制内无法获取锁,则会抛出 IlluminateContractsCacheLockTimeoutException

rrreee

管理跨进程的锁

有时,你希望在一个进程中获取锁并在另外一个进程中释放它。例如,你可以在 Web 请求期间获取锁,并希望在该请求触发的队列作业结束时释放锁。在这种情况下,你应该将锁的作用域「owner token」传递给队列作业,以便作业可以使用给定的 token 重新实例化锁:

rrreee

如果你想在不尊重当前锁的所有者的情况下释放锁,你可以使用 forceReleaserrreee

{tip} Si vous utilisez le pilote Memcached, lorsque les données mises en cache atteignent le stockage limite, " Les données stockées de manière permanente peuvent être supprimées.

Supprimer des données du cache

Vous pouvez supprimer ces données du cache en utilisant la méthode forget : 🎜rrreee🎜Vous pouvez également supprimer ces données en fournissant une valeur TTL nulle ou négative : 🎜rrreee🎜Vous pouvez utiliser flush Méthode pour vider tous les caches : 🎜rrreee
🎜{note} La méthode de vider le cache ne prend pas en compte le préfixe du cache et supprimera tout le contenu du cache. Veuillez donc réfléchir attentivement lorsque vous videz le cache partagé avec d'autres applications. 🎜
🎜🎜🎜
🎜

Serrures atomiques

🎜{note} Pour utiliser cette fonctionnalité, votre application doit utiliser le pilote de cache memcached, dynamodb ou redis comme pilote de cache par défaut de votre application. De plus, tous les serveurs doivent communiquer avec le même serveur de cache central. 🎜
🎜Les verrous atomiques permettent d'effectuer des opérations sur des verrous distribués sans se soucier des conditions de concurrence. Par exemple,
Laravel Forge🎜 utilise des verrous atomiques pour garantir qu'une seule tâche distante est exécutée sur un serveur à la fois. Vous pouvez utiliser la méthode Cache::lock pour créer et gérer des verrous : 🎜rrreee🎜 La méthode get peut également recevoir une fermeture. Une fois la fermeture exécutée, Laravel libérera automatiquement le verrou : 🎜rrreee🎜 Si le verrou n'est pas disponible au moment de votre demande, vous pouvez contrôler Laravel pour qu'il attende un nombre de secondes spécifié. Si le verrou ne peut pas être acquis dans le délai spécifié, IlluminateContractsCacheLockTimeoutException sera levée : 🎜rrreee
🎜🎜Gérer les verrous inter-processus🎜🎜 Parfois, vous souhaitez acquérir un verrou dans un processus et le libérer dans un autre processus. Par exemple, vous pouvez acquérir un verrou lors d'une requête Web et vouloir le libérer à la fin de la tâche en file d'attente déclenchée par cette requête. Dans ce cas, vous devez transmettre le "jeton de propriétaire" de la portée du verrou au travail en file d'attente afin que le travail puisse ré-instancier le verrou avec le jeton donné : 🎜rrreee🎜 Si vous souhaitez faire cela sans respecter le propriétaire actuel du verrou, libérer le verrou, vous pouvez utiliser la méthode forceRelease : 🎜rrreee🎜🎜🎜🎜🎜🎜

Fonction d'assistance de cache

En plus d'utiliser le contrat Cache Façade ou Cache, vous pouvez également utiliser la fonction d'assistance globale cache pour obtenir et enregistrer les données du cache. Lorsque la fonction cache n'accepte qu'un paramètre chaîne, elle renverra la valeur correspondant à la clé donnée : Cache Facade 或 Cache 契约 外,你还可以使用全局辅助函数 cache 来获取和保存缓存数据。当 cache 函数只接收一个字符串参数的时候,它将会返回给定键对应的值:

rrreee

如果你向函数提供了一组键值对和过期时间,它将会在指定时间内缓存数据:

rrreee

cache 函数在没有任何参数的情况下被调用时,它返回一个 IlluminateContractsCacheFactory 实现的实例,允许你调用其它缓存方法:

rrreee

{tip} 如果在测试中使用全局辅助函数 cache ,你可以使用 Cache::shouldReceive 方法就像 测试 Facade。

缓存标记

{note} 缓存标记不支持使用 filedatabase 缓存驱动。此外,当使用多个缓存标记的缓存设置为「永久」时,类似 memcached 的缓存驱动性能最佳,它会自动清除旧的记录。

写入被标记的缓存数据

缓存标记允许你给缓存相关进行标记,以便后续清除这些缓存值。你可以通过传入标记名称的有序数组来访问标记的缓存。例如,我们可以使用标记的同时使用 put 方法设置缓存。

rrreee

访问被标记的缓存数据

若要获取一个被标记的缓存数据,请将相同的有序标记数组传递给 tags 方法,然后调用 get 方法来获取你要检索的键:

rrreee

移除被标记的缓存数据

你可以清空有单个标记或是一组标记的所有缓存数据。例如,下面的语句会被标记为 peopleauthors 或两者都有的缓存。所以,AnneJohn 都会从缓存中被删除:

rrreee

相反,下面的语句只会删除被标记 authors 的缓存,所以 Anne 会被删除,但 Johnrrreee

Si vous fournissez à la fonction un ensemble de paires clé-valeur et un délai d'expiration, elle will Mettra en cache les données pendant une durée spécifiée :

rrreee Lorsque la fonction cache est appelée sans aucun paramètre, elle renvoie une instance de l'implémentation IlluminateContractsCacheFactory, vous permettant d'appeler Autre méthodes de mise en cache : rrreee

{tip} Si vous utilisez la fonction d'assistance globale cache dans vos tests, vous pouvez utiliser la méthode Cache::shouldReceive tout comme la méthode tester Façade.

Cache Tags

{note} L'utilisation des balises de cache n'est pas pris en charge par les pilotes de cache file et database. De plus, un pilote de cache tel que memcached fonctionne mieux lorsque le cache utilisant plusieurs balises de cache est défini sur « persistant », ce qui efface automatiquement les anciens enregistrements.
🎜🎜
🎜🎜Écrire des données de cache balisées🎜🎜Cache tag Vous permet de marquez les valeurs mises en cache afin qu'elles puissent être effacées ultérieurement. Vous pouvez accéder au cache des balises en transmettant un tableau ordonné de noms de balises. Par exemple, nous pouvons définir le cache en utilisant la méthode put avec la balise. 🎜rrreee🎜🎜🎜
🎜🎜Accéder aux données du cache balisées🎜🎜Pour obtenir un cache balisé Pour mettre en cache les données , transmettez le même tableau ordonné de balises à la méthode tags, puis appelez la méthode get pour obtenir la clé que vous souhaitez récupérer : 🎜rrreee🎜🎜🎜
🎜🎜Suppression des données de cache balisées🎜🎜Vous pouvez effacer une seule balise ou un groupe de balises Toutes les données mises en cache. Par exemple, l'instruction suivante serait mise en cache sous les noms people, authors ou les deux. Par conséquent, Anne et John seront supprimés du cache : 🎜rrreee🎜En revanche, l'instruction suivante supprimera uniquement le cache marqué auteurs , Donc Anne sera supprimé, mais John ne le sera pas : 🎜rrreee🎜🎜🎜🎜🎜🎜🎜Ajouter un pilote de cache personnalisé🎜🎜🎜🎜🎜🎜🎜

Écriture du pilote

Pour créer un pilote de cache personnalisé, vous devez d'abord implémenter le contrat IlluminateContractsCacheStore. Par conséquent, l'implémentation du cache de MongoDB ressemblera à ceci : IlluminateContractsCacheStore 契约。因此, MongoDB 的缓存实现看起来会像这样:

rrreee

我们只需要 MongoDB 的连接来实现这些方法。关于如何实现这些方法的实例,可以参阅框架源代码中的 IlluminateCacheMemcachedStore 。一旦完成契约额实现后,就可以像下面这样完成自定义驱动的注册了。

rrreee

{tip} 如果你不知道将缓存驱动代码放在哪,你可以在 app 目录下创建一个 Extensions 命名空间。然而,Laravel 并没有硬性规定应用程序的结构,你可以根据自己的喜好自由组织你的应用程序。

注册驱动

要使用 Laravel 来注册自定义缓存驱动,就要在 Cache Facade 上使用 extend 方法。 对 Cache::extend 的调用可以在新的 Laravel 应用程序中自带的 AppProvidersAppServiceProviderboot 方法中完成,或者你也可以创建自己的服务提供者来存放扩展,只是不要忘记在 config/app.php 的 provider 数组中注册服务提供者:

rrreee

传递给 extend 方法的第一个参数是驱动程序的名称。这将与 config/cache.php 配置文件的 driver 选项相对应。第二个参数是一个应该返回 IlluminateCacheRepository 实例的闭包。该闭包将传递一个 服务容器 的 $app 实例。

一旦你的扩展程序注册后,需要将 config/cache.php 配置文件中的 driver 选项更新为你的扩展名称。

事件

要在每次缓存操作时执行代码,你可以监听缓存触发的 事件 。通常,你应该将这些事件监听器放在 EventServiceProviderrrreee

Nous n'avons besoin que de la connexion MongoDB pour implémenter ces méthodes. Pour des exemples d'implémentation de ces méthodes, consultez IlluminateCacheMemcachedStore dans le code source du framework. Une fois le contrat complété, vous pouvez finaliser l'enregistrement du chauffeur personnalisé comme suit.
🎜
🎜🎜Enregistrement du pilote🎜🎜Pour utiliser Laravel pour enregistrer un cache personnalisé driver , vous devez utiliser la méthode extend sur la façade Cache. L'appel à Cache::extend peut être effectué dans la méthode boot du AppProvidersAppServiceProvider fourni avec la nouvelle application Laravel, ou vous pouvez créer votre propre fournisseur de services pour stocker les extensions, n'oubliez pas d'enregistrer le fournisseur de services dans le tableau des fournisseurs de config/app.php : 🎜rrreee🎜 passé au extend méthode Le premier paramètre est le nom du pilote. Cela correspondra à l'option driver du fichier de configuration config/cache.php. Le deuxième paramètre est une fermeture qui doit renvoyer une instance de IlluminateCacheRepository. La fermeture recevra une instance $app du conteneur de service. 🎜🎜Une fois votre extension enregistrée, vous devez mettre à jour l'option driver dans le fichier de configuration config/cache.php avec le nom de votre extension. 🎜🎜🎜🎜
🎜

Événements

🎜Pour exécuter du code à chaque opération de cache, vous pouvez écouter le déclenchement du cache événements. En règle générale, vous devez placer ces écouteurs d'événements dans EventServiceProvider : 🎜rrreee🎜Cet article est apparu pour la première fois sur le site Web 🎜LearnKu.com🎜. 🎜🎜