, 8 min read
Meningkatkan perfoma API dengan Cache menggunakan Redis dengan contoh menggunakan Database PostgreSQL dan Prisma
Apa itu Cache? Cache adalah mekanisme penyimpanan sementara yang digunakan untuk menyimpan data yang sering diakses agar dapat diambil dengan lebih cepat.
Berikut adalah beberapa kelebihan penggunaan cache:
Peningkatan Kinerja:
Caching memungkinkan akses cepat ke data yang sering digunakan. Dengan menyimpan salinan data yang sering diakses di dalam cache, aplikasi dapat menghindari biaya waktu dan sumber daya yang terkait dengan mengambil data dari sumber aslinya.
Responsivitas yang Lebih Baik: Dengan mengambil data dari cache daripada sumber aslinya, waktu respons aplikasi dapat dipercepat secara signifikan. Hal ini meningkatkan pengalaman pengguna dan membuat aplikasi terasa lebih responsif.
Pengurangan Beban Sumber Daya: Penggunaan cache membantu mengurangi beban pada sumber daya, seperti database atau layanan eksternal. Dengan menghindari eksekusi query atau permintaan ke sumber data utama, cache dapat membantu mengurangi tekanan pada sistem.
Cache dengan redis
Redis adalah salah satu sistem penyimpanan data berkinerja tinggi yang sering digunakan sebagai cache.
Data dalam Redis disimpan di dalam memori (in-memory storage). Hal ini memungkinkan Redis memberikan performa tinggi karena akses ke data lebih cepat dibandingkan dengan penyimpanan di disk.
Penggunaan Cache Redis di dalam Nest JS
Buat Project Nest JS
Jalankan perintah
nest new nest-cache-redis
Kemudian masuk ke project
cd nest-cache-redis
Persiapan Database
Buat docker-compose.yml
version: '3.9' services: db: image: postgres:15.3 environment: - POSTGRES_USER=postgres - POSTGRES_PASSWORD=postgres ports: - '5432:5432'
Kemudian jalankan perintah
docker compose up --build
Prisma
Install Prisma
yarn add -D prisma
Kemudian jalankan
yarn prisma init
Kemudian setting koneksi database didalam .env file
DATABASE_URL="postgresql://postgres:postgres@localhost:5432/postgres?schema=public"
Lalu edi file prisma/schema.prisma buat model user yang nantinya menjadi table user
// This is your Prisma schema file, // learn more about it in the docs: https://pris.ly/d/prisma-schema generator client { provider = "prisma-client-js" } datasource db { provider = "postgresql" url = env("DATABASE_URL") } model User { id Int @id @default(autoincrement()) email String @unique name String? }
Kemudian jalankan perintah
yarn prisma migrate dev
Buat nama migrationnya misal table_user
Kemudian check menggunakan dbeaver
Kemudian tambahkan contoh data user
Lalu buat api sederhana
di dalam app.service.ts buat fungsi untuk menampilkan users
import { Injectable } from '@nestjs/common'; import { PrismaClient } from '@prisma/client'; @Injectable() export class AppService { private db = new PrismaClient(); getHello(): string { return 'Hello World!'; } async getUsers() { return this.db.user.findMany(); } }
Lalu pada controller app.controller.ts
import { Controller, Get } from '@nestjs/common'; import { AppService } from './app.service'; @Controller() export class AppController { constructor(private readonly appService: AppService) { } @Get() getHello(): string { return this.appService.getHello(); } @Get('users') async getUsers() { return await this.appService.getUsers(); } }
Test API users
Kemudian buat cache
Persiapan Redis
Edit docker-compose.yml dan tambahkan service redis
version: '3.9' services: db: image: postgres:15.3 environment: - POSTGRES_USER=postgres - POSTGRES_PASSWORD=postgres ports: - '5432:5432' redis: image: redis ports: - 6379:6379
Jalankan ulang docker compose
docker compose up --build
Buat module & service cache
jalankan perintah
yarn nest g mo libs/cache yarn nest g s libs/cache
jalankan perintah
yarn add @nestjs/cache-manager cache-manager yarn add redis cache-manager-redis-store
edit cache.module.ts
import { Module } from '@nestjs/common'; import { CacheService } from './cache.service'; import { CacheModule as CacheMdl } from '@nestjs/cache-manager'; import type { RedisClientOptions } from 'redis'; const redisStore = require('cache-manager-redis-store').redisStore; @Module({ imports: [ CacheMdl.register<RedisClientOptions>({ store: redisStore, url: "redis://localhost:6379" }), ], providers: [CacheService], exports:[CacheService] }) export class CacheModule { }
Kemudian edit cache.service.ts
Buat fungsi setCache dan getCache
import { CACHE_MANAGER } from '@nestjs/cache-manager'; import { Inject, Injectable } from '@nestjs/common'; import { Cache } from 'cache-manager'; @Injectable() export class CacheService { constructor(@Inject(CACHE_MANAGER) private cacheManager: Cache) { } /** * Set cache * @param key * @param value * @param ttl */ async setCache(key: string, value: any, ttl: number = 1000) { return await this.cacheManager.set(key, value, ttl) } /** * Get cache by key * @param key */ async getCache(key: string) { return await this.cacheManager.get(key); } }
edit app.service.ts
import { CacheService } from './libs/cache/cache.service';
constructor(private cache: CacheService){}
Pada fungsi getUsers
async getUsers() { const key = 'users'; if (await this.cache.getCache(key)) { return await this.cache.getCache(key) } const users = await this.db.user.findMany(); if(users){ await this.cache.setCache(key, users, 10000); } return users; }
Kemudian hit API
Check cache redis dengan menggunakan Redis Insight
https://github.com/mister-coding/nestjs-cache-redis-postgre-prisma
Related Posts
Nest JS : Speed Up API with Cache Redis
Meningkatkan perfoma API dengan Cache menggunakan Redis dengan contoh menggunakan Database PostgreSQL dan Prisma
Nest JS Micoservices with GRPC and Monorepo
Kita akan belajar bagaimana membuat aplikasi microservices menggunakan Nest JS dan GRPC menggunakan Monorepo (Single Repository)
Rate limiting Nest JS
Rate limiter adalah sebuah mekanisme yang digunakan untuk mengatur laju atau frekuensi akses terhadap suatu sumber daya atau layanan. Tujuannya adalah untuk mencegah penyalahgunaan atau kelebihan beban terhadap sistem tersebut
Upload gambar pada Framwork Nest JS
Pada tutorial kali ini Kita akan belajar mengupload gambar pada Framwork Nest JS dan menseting supaya file bisa di akses menggunakan HTTP
NestJS Prisma Multi Connections
Prisma adalah Modern ORM yang memungkinakan kita membuat koneksi dan Query ke database menjadi lebih mudah dan lebih sederhana di bandingkan kalau kita tanpa menggunakan ORM.
Membuat Multi Thread atau Cluster mode pada nest JS (10x lebih cepat)
Node JS / Nest JS memiliki cara kerja Single Thread yang artinya hanya bisa menjalankan tugas satu persatu sehingga pada saat ada banyak tugas yang sedang di kerjakan harus bergantian beda dengan Multi Thread yang bisa menjalankan tugas secara bersamaan.
Membuat CRUD Rest API dengan Database MySQL Nest JS
Pada tutorial kali ini Kita akan belajar membuat CRUD Rest API dengan Database MySQL Nest JS supaya kita lebih memahami alur dari framework Nest JS
Konsep penting yang wajib di ketahui di dalam Framework NestJS
Pada tutorial kali ini Kita akan memahami Konsep penting yang wajib di ketahui di dalam Framework NestJS
Berkenalan dengan NestJS dan cara install NestJS
Pada tutorial kali ini kita akan berkenalan dengan NestJS, memahami cara kerja NestJS dan cara menginstall NestJS
Tags