Skip to content
This repository has been archived by the owner on Jan 28, 2024. It is now read-only.

add materi file-static #74

Open
wants to merge 9 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added back-end/caching/after-redis.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added back-end/caching/before-redis.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
150 changes: 150 additions & 0 deletions back-end/caching/redis.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,150 @@
# Caching

<img src="redis.png" width="500px" />

## 1. Penjelasan

Cache adalah proses yang digunakan oleh browser dan aplikasi untuk menyimpan informasi. Kamu pasti pernah menghapus history di browser, kan? Waktu menghapus history, pasti ada frasa “Bersihkan Cache”. Misalnya di Chrome, kalau ingin menghapus history akan diberikan pilihan untuk menghapus gambar dan file yang disimpan dalam cache.

## 2. Mengapa Menggunakan Caching

Kita dapat menggunakan cache agar dapat meningkatkan kecepatan, mengurangi penggunaan bandwith dan server load. Dengan menggunakan cache kita dapat meningkatkan kecepatan akses data.

## 3. Keuntungan Menggunakan Caching

1. **Struktur data fleksibel**
2. **Sederhana dan mudah digunakan**
3. **Sangat cepat** : Redis sangat cepat dan bisa melakukan sekitar 110000 SET per detik, sekitar 81000 GET per detik.

## 4. Pengenalan Redis

Redis, singkatan dari Remote Dictionary Server, adalah penyimpanan data nilai utama di dalam memori yang super cepat dengan sumber terbuka untuk digunakan sebagai database, cache, broker pesan, dan antrean. Redis adalah database temporary dan bersifat No SQL.

### 4.1. Install Redis

Silahkan ikuti tutorial berikut berdasarkan platform yang digunakan

[Install Redis pada Ubuntu](https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-redis-on-ubuntu-18-04)

[Install Redis pada Mac](https://medium.com/@petehouston/install-and-config-redis-on-mac-os-x-via-homebrew-eb8df9a4f298)

[Install Redis pada Windows](https://www.c-sharpcorner.com/article/installing-redis-cache-on-windows/)

### 4.2. Masuk ke Terminal
Ubuntu :
```bash
redis-cli
```
Mac :
```bash
redis-server
```

Windows :
```bash
redis-server.exe
```

### 4.3. Installasi Despendensi

```bash
# Install framework express
npm install express
```
```bash
# Install despendensi redis
npm install redis
```
```bash
# Install despendensi superagent
npm install redis
```

### 4.4. Fungsi fetch data dan menyimpan di redis

```bash
function getUserRepos(req, res) {
request.get(`https://my-json-server.typicode.com/typicode/demo/posts`, function (err, response) {
if (err) throw err;
var data = response.text

client.setex(REDISKEY, 3600, data); // menyimpan data di redis dengan format string

res.json(JSON.parse(data));
});
};
```

Untuk menyimpan data ke redis menggunakan command client.setex(key, time, data)
https://redis.io/commands/setex

### 4.5. Rungsi mengambil data dari redis

```bash
function cache(req, res, next) {
client.get(REDISKEY, function (err, data) {
if (err) throw err;

if (data != null) {
res.send(JSON.parse(data));
} else {
next();
}
});
}
```

Untuk mengambil data dari redis menggunakan command client.get(key, function(err, data))
https://redis.io/commands/get

### 4.6. Full source code

```bash
const express = require('express');
const app = express();
const request = require('superagent');
const redis = require('redis');
const client = redis.createClient();
const REDISKEY = 'WRI:dummy'

function getUserRepos(req, res) {
request.get(`https://my-json-server.typicode.com/typicode/demo/posts`, function (err, response) {
if (err) throw err;
var data = response.text

client.setex(REDISKEY, 3600, data); // menyimpan data di redis dengan format string

res.json(JSON.parse(data));
});
};

// middleware
function cache(req, res, next) {
client.get(REDISKEY, function (err, data) {
if (err) throw err;

if (data != null) {
res.send(JSON.parse(data));
} else {
next();
}
});
}

app.get('/', cache, getUserRepos);

app.listen(3001, function () {
console.log('express-redis listen on port 3001!')
});
```
https://github.com/alfaben12/express-redis-caching

### 4.7. Perbandingan

Sebelum menggunakan redis

<img src="before-redis.png" width="100%" />

Sesudah menggunakan redis

<img src="after-redis.png" width="100%" />
Binary file added back-end/caching/redis.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
25 changes: 25 additions & 0 deletions dasar/express-js/file-static.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
### 1. Permasalahan
Tidak dapat mengakses file secara publik, Express tidak dapat langsung membaca file/folder secara langsung, karena itu kita membutuhkan suatu route untuk mengakses file atau folder tersebut agar dapat diakses secara publik

### 2. Solusi
Agar file tersebut dapat ditampilkan, kita butuh membuat route khusus yang digunakan untuk menampilkan file-file yang ada pada suatu folder. Pada express, kita bisa membuatnya dengan mudah menggunakan middleware `express.static()`

### 3. Penjelasan Detail Materi
- `express.static()` adalah middleware Express yang digunakan untuk membantu client mengakses sebuah file dengan route yang ditentukan

### 4. Contoh Kasus
Folder public bersisi beberapa file yang akan kita akses menggunakan `express.static()`, Kita menggunakan `express.static()` dan route `/images` untuk membuat route agar client bisa mengakses file tersebut. Untuk mengakses file buka http://localhost:3000/images/namafile.png

Berikut source code dari penjelasan diatas :
```javascript
const express = require('express')
const app = express()

// menampilkan semua file atau folder yang ada pada folder public dan routingnya /images/namafile.png
app.use("/images", express.static('public'))


app.listen(3000, function () {
console.log("Server running on port :3000")
})
```