Добре дошли, начинаещи в 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 .