Добро пожаловать, новички в NestJS, в захватывающий мир стратегий кэширования! В этой статье мы отправимся в путешествие, чтобы изучить два мощных решения для кэширования, Redis и Memcached, и узнать, как легко интегрировать их в ваши приложения NestJS. Кэширование — это волшебная техника, которая может значительно повысить производительность и скорость отклика ваших приложений, и мы покажем вам, насколько просто это может быть с NestJS!

Раздел 1. Понимание важности кэширования

Прежде чем погрузиться в мир Redis и Memcached, давайте поймем, почему кэширование имеет решающее значение для современных веб-приложений. Проще говоря, кэширование позволяет нам хранить часто используемые данные в памяти с быстрым доступом. Это означает, что в следующий раз, когда нам понадобятся данные, мы сможем извлечь их из кеша, вместо того чтобы выполнять трудоемкий процесс извлечения их из базы данных или выполнения внешних вызовов API.

Используя кэширование, мы можем сократить время отклика, свести к минимуму нагрузку на сервер и улучшить общее взаимодействие с пользователем. Представьте, что ваше приложение работает как хорошо смазанный механизм, и в этом сила кэширования!

Раздел 2: Redis: швейцарский армейский нож кэширования

Redis — это надежное и универсальное хранилище данных в памяти, которое отлично подходит для кэширования. Он предлагает молниеносные операции чтения и записи, что делает его идеальным кандидатом для удовлетворения потребностей в кэшировании в приложениях NestJS. Давайте подробнее рассмотрим, как мы можем интегрировать Redis в наш проект NestJS.

Во-первых, убедитесь, что Redis установлен и работает в вашей системе. Теперь давайте установим клиент Redis для NestJS:

npm install --save @nestjs/microservices redis

Далее мы создадим службу Redis для удовлетворения наших потребностей в кэшировании. Вот простой пример для начала:

// redis.service.ts

import { Injectable } from '@nestjs/common';
import { ClientProxy, ClientProxyFactory, Transport } from '@nestjs/microservices';

@Injectable()
export class RedisService {
  private client: ClientProxy;

  constructor() {
    this.client = ClientProxyFactory.create({
      transport: Transport.REDIS,
      options: {
        url: 'redis://localhost:6379', // Replace with your Redis server URL
      },
    });
  }

  async get(key: string): Promise<any> {
    const value = await this.client.send<any>({ cmd: 'get' }, key).toPromise();
    return value ? JSON.parse(value) : null;
  }

  async set(key: string, value: any): Promise<void> {
    await this.client.send<any>({ cmd: 'set' }, { key, value: JSON.stringify(value) }).toPromise();
  }
}

Раздел 3: Memcached: ускорение вашей кэш-игры

Memcached — еще один фантастический вариант кэширования, особенно подходящий для приложений, которым требуется высокоскоростной доступ к кэшированным данным. Он работает аналогично Redis, но отличается в некоторых аспектах, что делает его ценным дополнением к вашему набору инструментов для кэширования. Давайте посмотрим, как интегрировать Memcached в ваш проект NestJS.

Во-первых, убедитесь, что Memcached установлен и работает в вашей системе. Теперь давайте установим клиент Memcached для NestJS:

npm install --save cache-manager cache-manager-memcached-store

После установки мы можем создать службу Memcached для кэширования:

// memcached.service.ts

import { Injectable } from '@nestjs/common';
import * as cacheManager from 'cache-manager';
import * as memcachedStore from 'cache-manager-memcached-store';

@Injectable()
export class MemcachedService {
  private cache: cacheManager.Cache;

  constructor() {
    this.cache = cacheManager.caching({
      store: memcachedStore,
      url: 'localhost:11211', // Replace with your Memcached server URL
      ttl: 60, // Set the time-to-live (TTL) for cached items (in seconds)
    });
  }

  async get(key: string): Promise<any> {
    return this.cache.get(key);
  }

  async set(key: string, value: any): Promise<void> {
    await this.cache.set(key, value);
  }
}

Раздел 4: Собираем все вместе

Теперь, когда у нас есть готовые сервисы Redis и Memcached, давайте применим их в реальном сценарии. Предположим, у нас есть конечная точка API, которая извлекает пользовательские данные из базы данных. Чтобы сократить время отклика, мы внедрим кэширование с помощью наших сервисов Redis и Memcached.

// users.controller.ts

import { Controller, Get, Param } from '@nestjs/common';
import { RedisService } from './redis.service';
import { MemcachedService } from './memcached.service';

@Controller('users')
export class UsersController {
  constructor(
    private readonly redisService: RedisService,
    private readonly memcachedService: MemcachedService,
  ) {}

  @Get(':id')
  async getUser(@Param('id') id: string) {
    let user = await this.redisService.get(`user:${id}`);

    if (!user) {
      // If not in Redis, fetch from the database
      user = await this.fetchUserFromDatabase(id);

      // Store in Redis and Memcached for future requests
      await this.redisService.set(`user:${id}`, user);
      await this.memcachedService.set(`user:${id}`, user);
    }

    return user;
  }

  // Pretend we have a function to fetch user data from the database
  private async fetchUserFromDatabase(id: string): Promise<any> {
    // Fun database query code goes here
  }
}

Заключение

Поздравляем, новички в NestJS, теперь вы открыли секреты кэширования с помощью Redis и Memcached! Реализуя эти стратегии кэширования, вы можете поднять производительность своих приложений NestJS на новый уровень. Помните, что кэширование — это мощный инструмент, но используйте его с умом и стратегически. Экспериментируйте, получайте удовольствие и получайте удовольствие от молниеносных ответов в своих проектах! 🚀

Дополнительные материалы на PlainEnglish.io.

Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord .