Merhaba,

 

Bu yazıda NestJS üzerinde Redis ile Cache kullanımından bahsedeceğim.

 

İlk olarak bir NestJS projesi oluşturuyoruz:

nest new nest-redis-cache-sample

 

Gerekli paketleri yüklüyoruz:

npm i cache-manager cache-manager-redis-store

 

Redis'i kolaylık olması adına Docker üzerinden çalıştırıyoruz:

docker run --name rediscache -p 6379:6379 -d redis

 

app.module.ts dosyasını açıp cache modülünü ve redis store'u import ediyoruz:

import { Module, CacheModule } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import * as redisStore from 'cache-manager-redis-store';

@Module({
  imports: [CacheModule.register({
    store: redisStore,
    host: 'localhost',
    port: 6379
  })],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

 

app.controller.ts dosyasını açıp şu şekilde bir kodlama yapıyoruz:

import { Controller, Get, Inject, CACHE_MANAGER } from '@nestjs/common';
import { AppService } from './app.service';
import { Cache } from 'cache-manager';

@Controller()
export class AppController {
  constructor(@Inject(CACHE_MANAGER) private cacheManager: Cache, private readonly appService: AppService) {}

  fakeString = "My name is Yusuf";

  @Get("fake-string")
  async getSimpleString() {
    let value = await this.cacheManager.get('my-fake-string');
    if (value) {
      return {
        data: value,
        loadsFrom: 'redis cache'
      };
    }

    await this.cacheManager.set('my-fake-string', this.fakeString, { ttl: 300 });
    return {
      data: this.fakeString,
      loadsFrom: 'fake database'
    };
  }
}

Burada yaptığımız işlemler;

  • Cache manager'ı import ettik.
  • Fake bir string tanımladık.
  • fake-string şeklinde bir route tanımladık. Burada Redis üzerindeki my-fake-string key'ini kontrol edip eğer o şekilde bir key mevcutsa değerini (value) döndürdük. Ayrıca Redis üzerinden döndüğünü anlamak için loadsFrom: ‘redis cache’ şeklinde bir veri döndürdük. Eğer öyle bir key mevcut değilse Redis'e string'i kaydettik. TTL (Time To Live) değeri olarak 300 verdik, böylece verinin 300 saniye boyunca cacheleneceğini belirttik. Veriyi veritabanından çektiğimizi varsayarak loadsFrom: ‘fake database’ şeklinde bir veri ile birlikte string'in kendisini döndürdük.

 

Projemizi ayağa kaldırıyoruz:

npm run start

 

http://localhost:3000/fake-string linkine gittiğimizde ilk olarak karşımıza şu veri çıkıyor;

{"data":"My name is Yusuf","loadsFrom":"fake database"}

 

Aynı linke tekrar gittiğimizde ise şu veri geliyor;

{"data":"My name is Yusuf","loadsFrom":"redis cache"}

 

Verinin Redis'e kaydolduğunu kontrol etmek adına Docker üzerinde çalışan Redis'de redis-cli'a giriyoruz:

docker exec -it rediscache redis-cli

 

redis-cli üzerinde şu komutu çalıştırıyoruz:

get my-fake-string

 

Aldığımız sonuç şu şekilde oluyor:

 

Projenin kodlarına buradan ulaşabilirsiniz.

 

Umarım yararlı olmuştur.

 

İyi çalışmalar.