Maison  >  Article  >  cadre php  >  Comment utiliser le framework Hyperf pour la mise en cache des requêtes

Comment utiliser le framework Hyperf pour la mise en cache des requêtes

WBOY
WBOYoriginal
2023-10-21 09:47:011061parcourir

Comment utiliser le framework Hyperf pour la mise en cache des requêtes

Comment utiliser le framework Hyperf pour la mise en cache des requêtes, des exemples de code spécifiques sont nécessaires

Introduction :
Lors du développement d'applications Web, nous devons souvent gérer un grand nombre de requêtes de données. Afin d'améliorer la vitesse de réponse et les performances du système, nous pouvons utiliser la technologie de mise en cache des requêtes. Le framework Hyperf fournit une fonction de mise en cache des requêtes pratique et facile à utiliser. Cet article présentera en détail comment utiliser le framework Hyperf pour la mise en cache des requêtes et donnera des exemples de code spécifiques.

1. Qu'est-ce que la mise en cache des requêtes ?
La mise en cache des demandes est une technologie qui met en cache les données fréquemment demandées en mémoire lorsque les mêmes données sont demandées la prochaine fois, elles sont extraites directement du cache sans accéder à nouveau à la base de données ou à l'interface externe. En utilisant la mise en cache des requêtes, les performances et la vitesse de réponse du système peuvent être considérablement améliorées.

2. Mise en cache des requêtes dans le framework Hyperf
Le framework Hyperf est un framework de microservices PHP hautes performances qui fournit la fonction de mise en cache des requêtes. La fonction de mise en cache des requêtes d'Hyperf est implémentée sur la base du composant HttpCache de Symfony, et la mise en cache des requêtes peut être activée via une configuration simple et une modification du code.

3. Activer la mise en cache des requêtes
Pour activer la mise en cache des requêtes, vous devez d'abord effectuer la configuration correspondante dans le fichier de configuration Hyperf config/autoload/routes.php. Dans le fichier routes.php, vous pouvez voir l'extrait de code suivant :

<?php

use HyperfHttpServerRouterRouter;

Router::get('/home', 'AppControllerHomeController@index');
// 其他路由配置代码...

Dans ce fichier, nous pouvons ajouter la configuration du cache à la route via la méthode Router::addServer(). Le code spécifique est le suivant :

<?php

use HyperfHttpServerRouterRouter;

Router::addServer('home', function () {
    Router::get('/home', 'AppControllerHomeController@index');
    // 其他路由配置代码...
}, ['name' => 'home']);

Dans la méthode addServer, on peut ajouter un nom à chaque serveur, ici on le nomme 'home'. Ensuite, nous configurons à nouveau le routage de la page d'accueil pour utiliser le cache. Ici, nous utilisons la méthode Router::addRoute et ajoutons des données de configuration du cache dans le troisième paramètre.

Ensuite, nous devons ajouter le code suivant à la fin du fichier config/autoload/routes.php :

<?php

use HyperfHttpServerRouterDispatcherFactory;
use HyperfHttpServerRouterHandler;

$dispatcher = new DispatcherFactory();

$dispatcher->setServer('home');

$dispatcher->setHandlers([
    new Handler('app', 'home'),
]);

return $dispatcher;

Dans le code ci-dessus, nous créons une instance du processeur de route via la nouvelle méthode Handler(), et puis ajoutez-le à la méthode setHandlers(). Le nom du processeur ici est « home », ce qui est cohérent avec le nom que nous avons ajouté précédemment dans Router::addServer().

À ce stade, nous avons terminé la configuration du cache de requêtes, nous pouvons maintenant écrire le code et le tester.

4. Exemple de code
Ce qui suit est un exemple de code utilisant la mise en cache des requêtes :

<?php

namespace AppController;

use HyperfHttpServerAnnotationAutoController;
use HyperfHttpServerAnnotationMiddleware;
use HyperfHttpServerAnnotationMiddlewareCollect;
use HyperfHttpServerContractRequestInterface;
use HyperfHttpServerContractResponseInterface;
use HyperfHttpServerRouterAnnotationMapping;
use PsrCacheCacheItemPoolInterface;

/**
 * @AutoController()
 * @MiddlewareCollect({VerifyMiddleware::class})
 */
class HomeController extends AbstractController
{
    /**
     * @ResourcePool
     */
    protected $resourcePool;
    
    /**
     * @RequestMapping(path="/home", methods={"GET"})
     * @Middleware(TraceMiddleware::class)
     */
    public function index(RequestInterface $request, ResponseInterface $response)
    {
        $cacheKey = 'home_index_data';
        
        // 检查缓存是否存在
        if ($this->resourcePool->has($cacheKey)) {
            return $this->resourcePool->get($cacheKey);
        }
        
        // 从数据库中获取数据
        $data = DB::table('table')->get();
        
        // 将数据写入缓存
        $this->resourcePool->put($cacheKey, $data, 600); // 缓存有效期为10分钟
        
        return $data;
    }
}

Dans le code ci-dessus, nous utilisons l'annotation @ResourcePool fournie par le framework Hyperf et utilisons le pool de cache par injection pour nous faciliter la lecture du cache. . Écrire. Dans la méthode d'indexation, nous vérifions d'abord si le cache existe, et s'il existe, récupérons directement les données du cache et les renvoyons sinon, obtenons les données de la base de données et les écrivons dans le cache. Lors de l'écriture dans le cache, nous avons précisé que la durée de validité du cache est de 600 secondes (soit 10 minutes).

5. Résumé
Grâce à l'exemple de code ci-dessus, nous montrons comment utiliser le framework Hyperf pour la mise en cache des requêtes. L'activation de la mise en cache des requêtes peut améliorer considérablement les performances et la réactivité de votre système, en particulier lors du traitement d'un grand nombre de requêtes répétées. J'espère que cet article vous aidera à comprendre et à utiliser la fonction de mise en cache des requêtes du framework Hyperf.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn