Anda di halaman 1dari 52

MODUL PRAKTIKUM

Pemrosesan Data Terdistribusi


Cache

Oleh:
Alam Rahmatulloh
Ricky Indra Gunawan

TASIKMALAYA
2022
MODUL IV
CACHE

A. Tujuan Praktikum
Praktikum diharapkan dapat :
1. Memahami Cache.
2. Mengimplementasikan Cache dengan NoSQL dalam aplikasi web berbasis Laravel.

B. Dasar Teori
1. Database Caching
Database cache biasa digunakan oleh para pengembang aplikasi berbasis web dengan
tujuan untuk meningkatkan kemampuan web menjadi lebih baik lagi. Keuntungan dalam
menggunakan database cache ini adalah pemrosesan data berlangsung lebih cepat, dan
mengurangi kinerja dari CPU. Caching ini menyimpan data-data seperti gambar dan file di
website ke dalam server dari website itu sendiri. Jadi pengguna dapat lebih cepat untuk
mengakses website tersebut. Dengan begitu kecepatan website akan meningkat dan akan
meningkatkan pengalaman pengguna.
Redis adalah pilihan tepat untuk mengimplementasikan cache dalam memori yang
tersedia sangat baik untuk mengurangi latensi akses data, meningkatkan throughput, dan
memudahkan muatan dari database dan aplikasi NoSQL atau relasional. Redis dapat
melayani item yang sering diminta pada waktu respons di bawah satu milidetik, dan
memungkinkan Anda untuk secara mudah menskalakan muatan yang lebih tinggi tanpa
menambah biaya backend yang lebih mahal. Cache hasil kueri database, cache sesi persisten,
cache halaman web, dan cache objek yang sering digunakan seperti gambar, file, dan
metadata semuanya merupakan contoh populer cache dengan Redis.

2. Redis
Redis, merupakan singkatan dari Remote Dictionary Server, adalah penyimpanan data
nilai-kunci, sumber terbuka, dan dalam memori yang cepat. Proyek ini dimulai ketika
Salvatore Sanfilippo, yang merupakan developer awal Redis, mencoba meningkatkan
skalabilitas perusahaan rintisan Italia miliknya. Dari sana, ia mengembangkan Redis, yang
sekarang digunakan sebagai basis data, cache, broker pesan, dan antrean.

2
Redis memberikan respons waktu di bawah satu milidetik yang memungkinkan jutaan
permintaan per detik untuk aplikasi waktu nyata pada industri seperti gaming, teknologi
iklan, layanan finansial, pemeliharaan kesehatan, dan IoT. Saat ini, Redis adalah salah satu
mesin sumber terbuka yang paling populer, dijuluki sebagai basis data "Paling Dicintai" oleh
Stack Overflow selama lima tahun berturut-turut. Karena kecepatan performanya, Redis
menjadi pilihan populer untuk caching, manajemen sesi, gaming, papan peringkat, analitik
waktu nyata, geospasial, ride-hailing, obrolan/olah pesan, streaming media, dan aplikasi
pub/sub.
Cara kerja Laravel dengan Redis :

Keterangan:
1. Cache hit: membaca data dari cache.
2. Cache miss (jika cache kosong): membaca data dari database.
3. Ambil data dari database.
4. Tulis data ke cache, untuk digunakan nanti.

C. Praktikum
Requirements :
1. PHP v8.0.12
2. PHP MongoDB Extension v1.11 (php_mongodb.dll)
3. Laravel Framework v8.x-dev [8.83.15]
4. Composer v2.1.12
5. XAMPP v3.3.0
6. Visual Studio Code atau Code Editor lainnya
7. MongoDB Community Edition v5.x
8. MongoDB Compass
3
9. Redis v3.2.100
10. JMeter
11. Internet Connection
Dengan arsitektur sebagai berikut.

Langkah-langkah :

1. Instalasi Composer dan Laravel


Pertama, lakukan instalasi Composer. Composer dapat diunduh dalam link berikut ini
https://getcomposer.org/download/. Jika sudah diunduh, jalankan file setup-nya lalu ikuti
sesuai dengan petunjuk instalasi, diantaranya adalah :

a. Tentukan Lokasi File Instalasi


b. Pilih Penggunaan Proxy
c. Review Lokasi Instalasi
d. Review Perubahan Instalasi
e. Instalasi Selesai

Setelah instalasi dinyatakan selesai, kita dapat mengecek Composer dengan


menggunakan perintah berikut ini di dalam Command Prompt.

composer --version

4
Setelah itu, buatlah project Laravel dengan menggunakan Composer.

composer create-project laravel/Laravel=”8.x-dev” <namaproject>

5
Setelah itu, kita buka project tersebut dengan code editor.

2. Integrasi MongoDB dengan project Laravel


Pertama, lakukan pemasangan extension php_mongodb.dll ke dalam PHP. File
tersebut bisa diunduh di https://pecl.php.net/package/mongodb serta langkah pemasangannya
terdapat pada link berikut
https://www.php.net/manual/en/mongodb.installation.windows.php. Cara untuk
memasangnya cukup dengan mengunduh php_mongodb.dll versi 1.11, kemudian

6
pindahkan file php_mongodb.dll ke dalam folder ext yang berada di dalam folder php. Folder
php berada di dalam folder xampp. Biasanya, defaultnya berada di C:\xampp\php\ext.

Setelah itu, edit file php.ini yang terletak pada folder PHP yang berada di dalam folder
XAMPP atau biasanya berada di C:\xampp\php.

Untuk mengecek apakah ekstensi php_mongodb.dll sudah terpasang atau belum,


buatlah sebuah folder di dalam XAMPP, lalu buatlah file php yang berisikan kode berikut.

<?php
phpinfo();
?>

7
Setelah itu, nyalakan Apache dalam XAMPP.

Selanjutnya, kita kunjungi halaman php yang telah kita buat. Gambar di bawah ini
merupakan tampilan halaman web yang memuat informasi PHP, salah satunya memuat
informasi mengenai ekstensi yang dipakai.

8
Jika kita telusuri halaman web-nya dan menemukan mongodb, maka extension
php_mongodb.dll telah berhasil terpasang.

Setelah extension php_mongodb.dll terpasang ke dalam php.ini, MongoDB ke dalam


folder direktori project Laravel dengan menggunakan command berikut.

composer require jenssegers/mongodb:^3.8

9
Setelah itu, kita atur file .env dengan pengaturan sebagai berikut.

DB_CONNECTION=mongodb
DB_HOST=127.0.0.1
DB_PORT=27017
DB_DATABASE=<nama database yang
diinginkan> DB_USERNAME=
DB_PASSWORD=

Langkah ketiga untuk mengintegrasikan MongoDB ke dalam project, yaitu dengan


mengubah mysql menjadi mongodb dalam file config/database.php.

10
Setelah itu, masih dalam file yang sama, kita perlu mendefinisikan database
MongoDB dengan code snippet sebagai berikut ke dalam list ‘connections’.

'mongodb' => [
'driver' => 'mongodb',
'host' => env('DB_HOST',
'127.0.0.1'), 'port' =>
env('DB_PORT', 27017),
'database' =>
env('DB_DATABASE'), 'username'
=> env('DB_USERNAME'),
'password' =>
env('DB_PASSWORD'), 'options'
=> [
// here you can pass more settings to the Mongo
Driver Manager
// see
https://www.php.net/manual/en/mongodb- driver-
manager.construct.php under "Uri Options" for a list of
complete parameters that you can use

11
Setelah itu, kita beralih ke dalam file config/app.php. Di sini, kita menambahkan
package untuk MongoDB Service Provider. Kita tambahkan ke dalam list ‘providers’.

Jenssegers\Mongodb\MongodbServiceProvider::class,

Di sini, kita telah berhasil menghubungkan project Laravel kita dengan database
MongoDB.

12
3. Pemasangan Fungsi CRUD NoSQL dan DomPDF dalam Proyek Laravel
Pada tahapan ini, kita memasang sistem CRUD berbasis MongoDB dalam proyek
Laravel. Pertama, buatlah model Buku :

php artisan make:model Buku

Selanjutnya kita mengatur bagian Model Buku :


<?php
Pada model Buku, kita menginisasi koneksi mongodb serta collection yang bernama
namespace App\Models;
buku.
use Illuminate\Database\Eloquent\Factories\HasFactory;
// use Illuminate\Database\Eloquent\
Model; use Jenssegers\Mongodb\Eloquent\
Model;

class Buku extends Model


{
use HasFactory;
protected $connection =
'mongodb'; protected $collection

Setelah itu, kita lakukan migrasi database terlebih dahulu. Jalankan perintah :
Php artisan migrate
Selanjutnya kita membuat controller untuk Buku. Jalankan perintah :
php artisan make:controller BukuController

13
Langkah berikutnya yaitu kita melakukan routing.
Route::get('/', [BukuController::class, 'index'])->name('home');

Route::post('/store', [BukuController::class, 'store'])-


>name('store');

Route::put('/update', [BukuController::class, 'update'])-


>name('update');

Route::delete('/destroy/{id}', [BukuController::class, 'destroy'])-


>name('destroy');

Route::get('/pdf', [BukuController::class, 'createPDF'])-


>name('cetak_pdf');

Selanjutnya, kita atur BookController agar dapat melakukan aksi CRUD.

14
D:\Web\cache-mongodb-laravel\app\Http\Controllers\BukuController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Buku;
use Barryvdh\DomPDF\Facade as PDF;

class BukuController extends Controller


{
public function index()
{
$buku = Buku::all();

return view('home', compact('buku'));


}

public function store(Request $request)


{
$buku = new Buku();
$buku->judul = $request->input('judul_buku');
$buku->penerbit = $request->input('penerbit_buku');
$buku->harga = $request->input('harga_buku');
$buku->save();

return redirect('/')->with('status', 'Data buku telah


berhasil ditambahkan!');
}

public function update(Request $request)


{
$buku = Buku::find($request->input('id'));
$buku->judul = $request->input('judul_buku_updt');
$buku->penerbit = $request->input('penerbit_buku_updt');
$buku->harga = $request->input('harga_buku_updt');
$buku->save();

return redirect('/')->with('status', 'Data buku berhasil


diubah!');
}

public function destroy($id)


{
$buku = Buku::find($id);
$buku->delete();

return redirect('/')->with('status', 'Data buku


berhasil dihapus!');
}

public function createPDF()


{
$buku = Buku::all();

$pdf = PDF::loadview('report.report', ['buku'=>$buku]);


return $pdf->download('book_data_report.pdf');
}

15
Pada tahapan ini, kita memasang DomPDF, yang dimana kita nantinya bisa mencetak
tabel data dalam bentuk .pdf. Pertama, lakukan instalasi DomPDF dalam proyek Laravel. Ini
akan mengunduh paket dan pustaka dompdf + fontlib juga.

composer require barryvdh/Laravel-dompdf

Tunggu sampai prosesnya selesai, kemudian kita akan mengintegrasikan package


DomPDF dengan proyek kita. Bukalah file app.php yang terletak dalam folder config lalu

16
tambahkan package yang baru kita unduh pada bagian providers dan aliases dalam file
app.php agar Laravel mengenali package DomPDF ini.

Pada tahap selanjutnya, kita mengatur tampilan website kita.


File home.blade.php merupakan file untuk mengatur tampilan halaman utama.
D:\Web\cache-mongodb-laravel\resources\views\home.blade.php
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-
scale=1">

<!-- Bootstrap CSS -->

17
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-
beta1/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-
giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1"
crossorigin="anonymous">
<!-- Font Awesome -->
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-
awesome/5.15.2/css/all.min.css" rel="stylesheet" integrity="sha512-
HK5fgLBL+xu6dm/Ii3z4xhlSUyZgTT9tuc/hSrtw6uzJOvgRr2a9jyxxT1ely+B+xFA
mJKVSTbpM/CuL7qxO8w==" crossorigin="anonymous"/>

<title>LIMAS Bookstore</title>
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-dark bg-primary">
<div class="container-fluid">
<a class="navbar-brand" href="#">LIMAS Bookstore</a>
<button class="navbar-toggler" type="button" data-bs-
toggle="collapse" data-bs-target="#navbarNav" aria-
controls="navbarNav" aria-expanded="false" aria-label="Toggle
navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link active" aria-current="page"
href="#">Home</a>
</li>
</ul>
</div>
</div>
</nav>

<div class="container mt-4">


<h3>Data Buku</h3>
<hr>
<button type="button" class="btn btn-success btn-sm mt-1"
data-bs-toggle="modal" data-bs-target="#modal-create">+ Tambah
Data</button>
<a href="{{ route('cetak_pdf') }}" target="_blank" class="btn
btn-danger btn-sm mt-1"><i class="fas fa-print me-2"></i>Cetak ke
PDF</a>
@if (session('status'))
<div class="alert alert-success alert-dismissible fade show
mt-3" role="alert">
<strong>{{ session('status') }}</strong>
<button type="button" class="btn-close" data-bs-
dismiss="alert" aria-label="Close"></button>
</div>
@endif
<table class="table table-bordered mt-4">
<thead>
<tr class="text-center">
<th scope="col">No</th>
<th scope="col">Judul</th>
<th scope="col">Penerbit</th>
<th scope="col">Harga</th>
<th scope="col">Aksi</th>
</tr>
</thead>

18
<tbody>
@php
$no = 1
@endphp
@foreach ($buku as $key => $value)
<tr class="text-center">
<th scope="row">{{ $no++ }}</th>
<td>{{ $value->judul }}</td>
<td>{{ $value->penerbit }}</td>
<td>{{ $value->harga }}</td>
<td>
<form action="{{ route('destroy', $value->id) }}"
method="POST">
<button type="button" class="btn btn-success btn-sm"
title="Update Data" data-bs-toggle="modal" data-bs-target="#modal-
update"
data-id="{{ $value->id }}"
data-judul="{{ $value->judul }}"
data-penerbit="{{ $value->penerbit }}"
data-harga="{{ $value->harga }}">
<i class="fas fa-pencil-alt"></i>
</button>
@csrf
@method('DELETE')
<button type="submit" class="btn btn-danger btn-sm"
title="Delete Data"><i class="fas fa-trash"></i></button>
</form>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>

@include('modal/modal-create')
@include('modal/modal-update')

<!-- Bootstrap JS -->


<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-
beta1/dist/js/bootstrap.bundle.min.js" integrity="sha384-
ygbV9kiqUc6oa4msXn9868pTtWMgiQaeYH7/t7LECLbyPA2x65Kgf80OJFdroafW"
crossorigin="anonymous"></script>
<!-- JQuery JS -->
<script
src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min
.js" integrity="sha512-
bLT0Qm9VnAYZDflyKcBaQ2gg0hSYNQrJ8RilYldYQ1FxQYoCLtUjuuRuZo+fjqhx/qt
q/1itJ0C2ejDxltZVFg==" crossorigin="anonymous"></script>

<script type="text/javascript">
$(document).ready(function() {
$('#modal-update').on('show.bs.modal', function (event) {
var div = $(event.relatedTarget)
var modal = $(this)

modal.find('#id').attr("value", div.data('id'));
modal.find('#judul_buku_updt').attr("value",
div.data('judul'));
modal.find('#penerbit_buku_updt').attr("value",
div.data('penerbit'));

19
modal.find('#harga_buku_updt').attr("value", div.data('harga'));

});

window.setTimeout(function()
{
$(".alert").fadeTo(500, 0).slideUp(500,
function(){
$(this).remove();
});
}, 4000);
});
</script>

</body>
</html>

File modal-create.blade.php merupakan file untuk mengatur tampilan yang bersifat


modal yang digunakan sebagai form untuk membuat data.
D:\Web\cache-mongodb-laravel\resources\views\modal\modal-create.blade.php
<div class="modal fade" id="modal-create" data-bs-backdrop="static"
data-bs-keyboard="false" tabindex="-1" aria-
labelledby="staticBackdropLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="staticBackdropLabel">Tambah
Data Buku</h5>
<button type="button" class="btn-close" data-bs-
dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<form action="{{route('store')}}" method="post">
@csrf
<div class="row mb-3">

20
<label for="#" class="col-sm-3 col-form-label">Judul Buku</label>
<div class="col-sm-9">

<input name="judul_buku"> type="text" class="form-control"


</div>
</div>

<div class="row mb-3">


<label label">Penerbit</label>
for="#" class="col-sm-3 col-form-

<div class="col-sm-9">
<input name="penerbit_buku"> type="text" class="form-control"
</div>

</div>
<div class="row mb-3">
<labelfor="#"class="col-sm-3col-form- label">Harga</label>
<div class="col-sm-9">

<input name="harga_buku"> type="text" class="form-control"


</div>
</div>
</div>

<div class="modal-footer">
<buttontype="submit"class="btnbtn- primary">Tambah</button>
<button type="button" class="btn btn-secondary" data-bs- dismiss="modal">Clo
</div>
</form>
</div>
</div>
</div>

File modal-update.blade.php merupakan file untuk mengatur tampilan yang bersifat


modal yang digunakan sebagai form untuk mengedit data.

21
D:\Web\cache-mongodb-laravel\resources\views\modal\modal-update.blade.php
<div class="modal fade" id="modal-update" data-bs-backdrop="static"
data-bs-keyboard="false" tabindex="-1" aria-
labelledby="staticBackdropLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="staticBackdropLabel">Ubah Data
Buku</h5>
<button type="button" class="btn-close" data-bs-
dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<form id="frm_updt" method="post"
action="{{route('update')}}">
@csrf
@method('PUT')
<div class="row mb-3">
<label for="#" class="col-sm-3 col-form-label">Judul
Buku</label>
<div class="col-sm-9">
<input type="hidden" class="form-control" name="id"
id="id">
<input type="text" class="form-control"
name="judul_buku_updt" id="judul_buku_updt">
</div>
</div>
<div class="row mb-3">
<label for="#" class="col-sm-3 col-form-
label">Penerbit</label>
<div class="col-sm-9">
<input type="text" class="form-control"
name="penerbit_buku_updt" id="penerbit_buku_updt">
</div>
</div>
<div class="row mb-3">
<label for="#" class="col-sm-3 col-form-
label">Harga</label>
<div class="col-sm-9">
<input type="text" class="form-control"
name="harga_buku_updt" id="harga_buku_updt">
</div>
</div>
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-primary">Ubah</button>
<button type="button" class="btn btn-secondary" data-bs-
dismiss="modal">Close</button>
</div>
</form>
</div>
</div>
</div>

22
File report.blade.php merupakan file untuk mengatur tampilan halaman .pdf yang
akan dicetak.
D:\Web\cache-mongodb-laravel\resources\views\report\report.blade.php
<!DOCTYPE html>
<html>
<head>
<title>Book Data Report</title>
</head>
<style type="text/css">
table { border: solid 1px #000; border-collapse: collapse;
width: 100%; margin-top: 40px;}
tr th { font-size: 13px; border: solid 1px #000; padding: 8px
0; text-align: center; }
td { padding: 7px 5px; font-size: 12px; border: solid 1px
#000; text-align: center; }
h2 { text-align: center; }
</style>
<body>
<h2>Book Data Report</h2>
<table>
<thead>
<tr>
<th>No</th>
<th>Judul Buku</th>
<th>Penerbit</th>
<th>Harga</th>
</tr>
</thead>
<tbody>
@php
$no = 1;
@endphp
@foreach($buku as $key => $value)
<tr>

23
<td>{{ $no++ }}</td>
<td>{{$value->judul}}</td>
<td>{{$value->penerbit}}</td>
<td>{{$value->harga}}</td>
</tr>
@endforea
ch
</tbody>
</table>
</body>

Untuk melakukan uji coba web yang telah dibuat, lakukan perintah berikut ini.
php artisan
config:cache php
artisan cache:clear

24
Setelah melakukan perintah tersebut, maka kita akan melihat tampilan utama web.

Jika kita menekan tombol “+ Tambah Data” maka akan muncul modal untuk mengisi
data baru.

25
26
Setelah itu, kita coba tambahkan 1 data lagi.

Jika kita menekan tombol yang terdapat simbol pensil yang berada di dalam kolom
“Aksi”, maka akan muncul modal untuk mengupdate data yang berada di dalam baris data
tersebut.

27
28
Jika kita menekan tombol yang terdapat simbol keranjang sampah yang berada di
dalam kolom “Aksi”, maka data akan langsung terhapus.

29
Kita juga dapat mengecek data tersebut di dalam MongoDBCompass atau Mongosh
(MongoDB Shell).

30
Jika kita menekan tombol “Cetak ke PDF”, maka kita akan mengunduh file
book_data_report.pdf yang berisikan tabel data buku sesuai dengan tampilan yang telah
diatur dalam file D:\Web\cache-mongodb-laravel\resources\views\report\report.blade.php.

31
Dari langkah-langkah yang kita lakukan sejauh ini, kita telah berhasil membangun
website yang memiliki fungsi dasar seperti CRUD dan mencetak file .pdf dari data yang ada.
Selanjutnya, kita akan mengimplementasikan sistem cache.

4. Caching
Sebelumnya, kita perlu melakukan instalasi Redis ke dalam PC kita. Redis dapat
diunduh di https://github.com/microsoftarchive/redis/releases. Kali ini, Redis yang kita
gunakan yaitu versi 3.2.100. Di sini, kita cukup unduh Redis-x64-3.2.100.msi. Setelah
diunduh, kita buka file tersebut lalu ikuti langkah-langkah sesuai dengan instruksinya.

Setelah kita berhasil dalam instalasi Redis, kita dapat menjalankan redis-server
kemudian kita jalankan redis-cli.

Instalasi Redis dalam project Laravel dapat dilakukan dengan perintah berikut ini.

php artisan migrate


composer require predis/predis

32
Setelah itu, kita mengubah pada bagian CACHE_DRIVER dari file menjadi redis
serta menambahkan REDIS_CLIENT=predis pada file .env.

Setelah itu, kita ubah juga pada bagian config/cache.php yang awalnya file menjadi
redis.

33
Untuk menerapkannya, kita cukup melakukan perintah berikut.
Jika
phptidak ada error, maka redis berhasil diterapkan.
artisan
config:cache php

Untuk mencobanya, kita dapat melakukan test sederhana.


Kita dapat memanggil redis seperti pada gambar di bawah
ini.
use Illuminate\Support\Facades\
Redis; Route::get('/test', function
() {
$p =
Redis::incr('p');

34
Hasilnya yaitu sebagai berikut.

Data tersebut tersimpan di dalam Redis.

Untuk menerapkan cache pada BukuController, maka kita harus melakukan


perubahan pada BukuController.

D:\Web\cache-mongodb-laravel\app\Http\Controllers\BukuController.php
<?php

namespace App\Http\Controllers;

35
use Illuminate\Http\Request;
use App\Models\Buku;
use Illuminate\Support\Facades\Cache;
use Barryvdh\DomPDF\Facade as PDF;

class BukuController extends Controller


{
public function index()
{
$buku = Cache::remember('bukus:all', 60, function () {
return Buku::all();
});

return view('home', compact('buku'));


}

public function store(Request $request)


{
$buku = new Buku();
$buku->judul = $request->input('judul_buku');
$buku->penerbit = $request->input('penerbit_buku');
$buku->harga = $request->input('harga_buku');
$buku->save();
Cache::forget('bukus:all');
return redirect('/')->with('status', 'Data buku berhasil
ditambahkan!');
}

public function update(Request $request)


{
$buku = Buku::find($request->input('id'));
$buku->judul = $request->input('judul_buku_updt');
$buku->penerbit = $request->input('penerbit_buku_updt');
$buku->harga = $request->input('harga_buku_updt');
$buku->save();
Cache::forget('bukus:all');
return redirect('/')->with('status', 'Data buku berhasil
diubah!');
}

public function destroy($id)


{
$buku = Buku::find($id);
$buku->delete();
Cache::forget('bukus:all');
return redirect('/')->with('status', 'Data buku berhasil
dihapus!');
}

public function createPDF()


{
$buku = Buku::all();

$pdf = PDF::loadview('report.report', ['buku'=>$buku]);


return $pdf->download('book_data_report.pdf');
}

36
5. Pemasangan Laravel DebugBar untuk Melakukan Uji Coba Cache Redis
Laravel DebugBar dapat memberi kita informasi mengenai query apa saja yang telah
berjalan serta memberikan informasi mengenai response time.

Cara instalasi Laravel DebugBar ke dalam project kita adalah sebagai berikut.

composer require barryvdh/Laravel-debugbar --dev

Setelah itu, kita perlu memasukkan package ke dalam label ‘providers’ yang berada di
dalam file config/app.php.

37
Barryvdh\Debugbar\ServiceProvider::class,

Masih dalam file yang sama, kita juga perlu memasukkan package ke dalam label
‘aliases’ yang berada di dalam file config/app.php.

'Debugbar' => Barryvdh\Debugbar\Facade::class,

Setelah itu, kita perlu melakukan publish debugbar agar konfigurasi yang berasal dari
vendor dapat dipindahkan ke dalam konfigurasi utama project.

php artisan vendor:publish --


provider=”Barryvdh\Debugbar\ServiceProvider”

38
Setelah itu, kita dapat mencoba Laravel DebugBar yang baru saja kita pasang.

Pada gambar di bawah ini, kita dapat melihat response time serta query apa saja yang
dijalankan.

Jika kita menggunakan cache, ketika kita melakukan refresh, sistem tidak perlu
melakukan query lagi karena sudah tersimpan dalam cache sehingga response time-nya lebih
cepat daripada aplikasi yang tidak menggunakan cache.

39
Jika kita tidak menggunakan cache, ketika kita refresh halaman tersebut, sistem akan
melakukan query lagi ketika halaman di-refresh.

Data yang disimpan dalam cache dapat kita lihat dalam redis-cli.

40
6. Pengisian Data dan Pengujian Ulang Cache melalui Laravel DebugBar
Agar perubahan Response Time antara web yang menggunakan caching serta yang
tidak menggunakan caching dapat terlihat dengan jelas, di sini kita akan mencoba
memasukkan 1000 data ke dalam database MongoDB melalui file. File yang didukung oleh
MongoDB, diantaranya file yang berformat JSON dan CSV.

Pertama, kita masuk terlebih dahulu ke dalam database dan collection kita di
MongoDBCompass. Setelah itu, klik “ADD DATA” lalu klik “Import File”.

41
Setelah diklik, maka akan muncul modal box untuk melakukan import file ke dalam
database tersebut.

Pilihlah file yang akan dimasukkan ke dalam database.

Setelah itu, klik “IMPORT”.

42
Setelah menekan tombol “IMPORT”, data yang berasal dari file tersebut akan
otomatis ditambahkan ke dalam collection database tersebut, yang dalam hal ini adalah
dengan database yang bernama book_db dan collection yang bernama buku. Di sini, dapat
kita lihat jumlah data/documents dalam collection tersebut menjadi 1,0k atau 1001 baris (1
data awal didapat dari operasi CREATE sebelumnya).

43
Setelah itu, kita dapat membandingkan kecepatannya.

44
Terlihat bahwa pada gambar pertama yang merupakan web yang tidak menggunakan
cache terdapat Response Time sebesar 215 ms dengan tambahan waktu query selama 1.18
ms.

Pada gambar kedua, ketika kita menggunakan cache, pada saat pertama kali kita
kunjungi website tersebut maka akan melakukan query seperti biasa. Namun, ketika kita
refresh/reload, maka data akan tersimpan di dalam cache sehingga web tersebut tidak perlu
melakukan query lagi. Selain itu, Response Time-nya pun jauh berkurang menjadi 158 ms.

45
7. JMeter Load Test/Stress Test
Untuk menguji serta membandingkan hasil response time antara aplikasi yang
menggunakan cache dengan yang tidak menggunakan cache dapat dilakukan uji load testing
atau stress test dengan menggunakan Apache JMeter.

Apache JMeter (Binaries) dapat diunduh di


https://jmeter.apache.org/download_jmeter.cgi.

Untuk menjalankan JMeter di Windows cukup klik dua kali jmeter.bat di dalam folder
apache-jmeter-5.4.1/bin/ atau buka command prompt dan ketik <file path>/apache-jmeter-
5.4.1/bin/jmeter.bat dan tunggu beberapa detik JMeter GUI akan diluncurkan.

Cara menggunakannya, pertama, kita perlu menambahkan Thread Group.

46
Setelah itu, kita menggunakan HTTP Request.

Kemudian, kita pilih Listener yang kita perlukan.

47
Pada menu Thread Group, kita bisa menentukan Loop Count sesuai dengan kebutuhan.

48
Pada menu HTTP Request, kita perlu menentukan IP, Port serta Path yang akan diuji.

Pada menu Listener, kita perlu mencantumkan nama file yang akan digunakan sebagai
hasil output.

49
Setelah itu, kita dapat klik Play yang berada di menu atas.

Pada gambar di bawah ini merupakan hasil Load Testing/Stress Test pada aplikasi
yang menggunakan cache.

Pada gambar di bawah ini merupakan hasil Load Testing/Stress Test pada aplikasi
yang tidak menggunakan cache. Dapat terlihat Connect Time (ms) terdapat angka 19, yang
dimana lebih lama dibandingkan dengan gambar yang di atas.

50
Jika kita menyimpannya dalam .csv, kita dapat melakukan visualisasi dengan grafik
dalam aplikasi Microsoft Excel untuk membandingkan kedua test tersebut dengan jelas.

D. Kesimpulan
Database cache biasa digunakan oleh para pengembang aplikasi berbasis web dengan
tujuan untuk meningkatkan kemampuan web menjadi lebih baik lagi. Keuntungan dalam
menggunakan database cache ini adalah pemrosesan data berlangsung lebih cepat, dan

51
mengurangi kinerja dari CPU. Caching ini menyimpan data-data seperti gambar dan file di
website ke dalam server dari website itu sendiri. Jadi pengguna dapat lebih cepat untuk
mengakses website tersebut. Dengan begitu kecepatan website akan meningkat dan akan
meningkatkan pengalaman pengguna.

Redis, merupakan singkatan dari Remote Dictionary Server, adalah penyimpanan data
nilai-kunci, sumber terbuka, dan dalam memori yang cepat. Saat ini, Redis adalah salah satu
mesin sumber terbuka yang paling populer, dijuluki sebagai basis data "Paling Dicintai" oleh
Stack Overflow selama lima tahun berturut-turut. Karena kecepatan performanya, Redis
menjadi pilihan populer untuk caching, manajemen sesi, gaming, papan peringkat, analitik
waktu nyata, geospasial, ride-hailing, obrolan/olah pesan, streaming media, dan aplikasi
pub/sub.

52

Anda mungkin juga menyukai