Menggunakan Redis Untuk Meng-Cache Data Di Server NodeJS Dan ExpressJS
Apa itu cache?
- Cache adalah penyimpanan lokal yang digunakan untuk menyimpan data yang sering digunakan.
- Caching adalah proses menyimpan salinan file dalam cache atau lokasi penyimpanan sementara untuk akses yang lebih cepat.
Apa itu Redis?
- Redis adalah singkatan dari Remote Dictionary Server.
- Redis adalah penyimpanan data nilai kunci dalam memori sumber terbuka untuk digunakan sebagai database, cache, perantara pesan, dan antrian.
Instal server Redis.
Langkah 1: Unduh file zip Redis terbaru dari lokasi hub git resmi. Bagi saya, ini adalah Redis-2.4.5-win32-win64.zip.
Langkah 2: Ekstrak file redis-2.4.5-win32-win64.zip ke lokasi yang diinginkan.
Langkah 3: Berdasarkan sistem operasi Anda, sesuaikan dengan dua folder berbeda. Satu untuk 32-bit dan yang lainnya untuk 64-bit.
Langkah 4: Buka 64-bit dan Anda akan menemukan file-file berikut:
Langkah 5: Klik dua kali pada file redis-server.exe dan Anda akan melihat server Redis mulai dan Anda dapat menunggu untuk terhubung ke client seperti di bawah ini.
Langkah 6: Buka file Redis-cli.exe dan sambungkan ke antarmuka baris perintah Redis.
Ini bertindak sebagai client Redis, jadi segera setelah Anda membuka CLI ini, Anda akan melihat pesan koneksi client di server Redis Anda, seperti yang ditunjukkan di bawah ini.
Setelah Anda menginstal Redis, ada dua cara untuk menggunakan Redis:
- Instal Redis-CLI.
- Gunakan Redis di aplikasi server Anda.
Langkah 1: Buat BasicExpressServer dan instal paketnya.
let express = require('express');
var app = express();
app.get('/', (req, res) => {
res.send('<h1>Hello Welcome to Redis Cache </h1>');
});
app.listen(3000, () => {
console.log('server is live on port 3000');
});
npm install axios --save
const { default: axios } = require('axios');
let express = require('express');
var starwarsURL = 'https://swapi.dev/api/';
var app = express();
app.get('/', (req, res) => {
res.send('<h1>Hello Welcome to Redis Cache </h1>');
});
app.get('/starwars/:search', async (req, res) => {
let search = req.params.search;
let data = await axios(starwarsURL + search);
res.json({ data: data.data, info: 'data from 3rd party API' });
});
app.listen(3000, () => {
console.log('server is live on port 3000');
});
Langkah 2 Gunakan Redis untuk menyimpan data.
- Instal paket Redisnpm.
npm i redis --save
const { default: axios } = require('axios');
let express = require('express');
//importing redis
let redis = require('redis');
var starwarsURL = 'https://swapi.dev/api/';
var app = express();
//using redis.createClient() method
let client = redis.createClient(6379);
//logging if any error
client.on('error', (err) => {
console.log(err);
});
app.get('/', (req, res) => {
res.send('<h1>Hello Welcome to Redis Cache </h1>');
});
app.get('/starwars/:search', async (req, res) => {
let search = req.params.search;
let data = await axios(starwarsURL + search);
//caching received data using redis
client.setex(search, 600, JSON.stringify(data.data));
res.json({ data: data.data, info: 'data from 3rd party API' });
});
app.listen(3000, () => {
console.log('server is live on port 3000');
});
Langkah 3 Tambahkan middleware dan periksa apakah data ada di cache.
- Selanjutnya, Anda perlu membuat middleware bernama checkCache. Middleware ini dapat mengakses req, res, dan next.
- Di middleware samping, Anda dapat menggunakan metode client.get() untuk memeriksa apakah data yang diperlukan ada dalam cache.
- Metode client.get() menerima string sebagai parameter pertama dan memanggil kembali fungsi sebagai parameter kedua.
- Anda dapat memberikan nama kunci yang perlu dicari di cache sebagai parameter pertama.
- Terakhir, kita perlu menambahkan middleware ini ke route handler.
var app = express();
//using redis.createClient() method
let client = redis.createClient(6379);
//logging if any error
client.on('error', (err) => {
console.log(err);
});
app.get('/', (req, res) => {
res.send('<h1>Hello Welcome to Redis Cache </h1>');
});
//middleware to check data is present in cache
var checkCache = (req, res, next) => {
let search = req.params.search;
client.get(search, (err, data) => {
if (err) throw err;
if (!data) {
return next();
} else {
return res.json({ data: JSON.parse(data), info: 'data from cache' });
}
});
};
app.get('/starwars/:search', checkCache, async (req, res) => {
let search = req.params.search;
let data = await axios(starwarsURL + search);
//caching received data using redis
client.setex(search, 600, JSON.stringify(data.data));
res.json({ data: data.data, info: 'data from 3rd party API' });
});
app.listen(3000, () => {
console.log('server is live on port 3000');
});