@Kadek-Darmayasa dan @recovdot halo selamat datang di forum BaliJS. Jgn lupa join Telegram grup kita jg yah
I Putu Alfred Crosby (@alfrcr)
Information about I Putu Alfred Crosby
About me
Data Warehouse Engineer at Gopay. Formerly SWE at Kumparan, Grab, Tokopedia, Urbanhire.
Posts made by alfrcr
-
-
@krismaputra halo bli, selamat datang. Ditunggu kontribusi nya di komunitas BaliJS
-
@mahend_ halo2 Mahend selamat datang, silakan kalo mau bertanya2 atau sharing di forum BaliJS
-
@visualstudiocode said in What happend ieu teh?:
Script php artisan optimize handlin
kalo liat pesan error nya, di stackoverflow saya nemunya ini sih. https://stackoverflow.com/questions/60814706/invalid-characters-passed-for-attempted-conversion-these-have-been-ignored-pu
Mungkin ada package yg perlu di update?
-
@visualstudiocode boleh tau versi laravel nya? Mungkin malem ini blm bnyk yg bisa bantu karena udah pda istirahat
-
@visualstudiocode selamat datang Daffa. Silakan sharing, bertanya atau membantu jawab2 pertanyaan disini.
Walaupun namanya forumnya BaliJS tp forum ini gak eksklusif hanya utk Bali aja, tp jg utk seluruh warga Indonesia
-
@ttm boleh bgt, malah jangan cuma 1 artikel aja wkkwkw Kita di komunitas harus belajar apapun, kita gak tau jg nanti siapa tau diperlukan jg di pekerjaan kita
Menurutku, malah akan bagus kalo kita minimal sedikit tau terminologi2 di ML sbg engineer
-
Thanks bli @Merta-Yoga Keren dan jelas bgt penjelasannya
Nunggu episode selanjutnya. Ijin share ke grup telegram dan grup facebook bli -
@Merta-Yasa welcome!!! silakan kalo mau bertanya atau sharing di forum bli Merta
-
@Merta-Yasa saya di Jaksel bli wah harusnya seangkatan @Galang-Kerta tp Galang di kampus STIKOM Jimbaran wkwkw
-
Redis(remote dictionary service) adalah salah satu database NoSQL yang pasti sering teman-teman dengar. Redis merupakan sebuah penyimpanan struktur data di dalam memory (bisa persistent juga di dalam disk) yang biasa digunakan sebagai database, cache atau message-broker.Redis mendukung banyak tipe struktur data seperti: Strings, Lists, Sets, Hashes, Sorted Sets, Geospatial Indexes, dan lain-lain yang teman-teman dapat lihat di halaman resmi redis.
Kapan kita perlu redis?
Penggunaan umum redis yang sering kita dengar adalah sebagai cache storage. Namun sebenarnya ada banyak kasus lainnya yang juga bisa kita gunakan, seperti: membuat personalized feed timeline seperti Twitter Timeline, membuat leaderboard, menyimpan session login, sebagai message broker, menghitung jarak geografi dalam radius, atau sebagai queue.
Yuk kita bahas cases umum tersebut dan struktur data apa yang biasa digunakan.
Redis sebagai Cache Storage
Struktur data yang digunakan disini adalah String. Biasanya ketika servis backend melakukan proses yang memakan resource(komputasi) yang besar, ada baiknya proses tersebut dibuatkan mekanisme caching agar pada proses berikutnya tidak perlu melakukan komputasi lagi. Contoh:
PS: kita akan menggunakan ioredis dalam contoh codeasync function getUser(req, res) { const userID = req.params.id; const CACHE_KEY = `get:user:${userID}`; const cache = await redis.get(CACHE_KEY) if (cache) { return res.json({ success: true, data: JSON.parse(getCache) }) } const user = await User.findBy(userID).get(); await redis.set(CACHE_KEY, JSON.stringify(user)) return res.json({ success: true, data: user }) }
Redis sebagai Queue
Biasanya dalam membuat program kita pasti menemukan sebuah proses membutuhkan waktu yang lama untuk diselesaikan. Contohnya pada kehidupan sehari-hari: Transcoding video pada youtube (setelah upload video di youtube tidak langsung terpublish), mengirim ribuan email newsletter, dan banyak lagi proses-proses yang biasa disebut blocking process.
Nah, bagaimana cara agar proses tersebut tidak ngeblok proses lainnya? Dengan melempar proses tersebut ke thread yang berbeda dan dikerjakan dibelakang layar secara asynchronous (tidak blocking lagi deh ). Di NodeJS queue favorit saya adalah Bull.(*saya enggak lagi promosi)
Untuk contoh penggunaan code nya saya copas langsung dari README file Bull.
var Queue = require('bull'); var videoQueue = new Queue('video transcoding', 'redis://127.0.0.1:6379'); videoQueue.process(function(job, done){ // job.data contains the custom data passed when the job was created // job.id contains id of this job. // transcode video asynchronously and report progress job.progress(42); // call done when finished done(); // or give a error if error done(new Error('error transcoding')); // or pass it a result done(null, { framerate: 29.5 /* etc... */ }); // If the job throws an unhandled exception it is also handled correctly throw new Error('some unexpected error'); });
Redis sebagai Message Broker
Kadang ketika kita memiliki service yang begitu banyak (microservice), kita membutuhkan sebuah perantara untuk memberitahu event yang sedang terjadi? Apa maksudnya? Misal kasusnya kaya gini:
Ketika seorang pelanggan melakukan order,
- service order perlu memberitahu service notifikasi untuk mengirim notifikasi ke merchant
- service order perlu memberitahu service products untuk mengurangi jumlah stock nya
- service order juga perlu memberitahu service payment untuk melakukan pengurangan saldo
Secara tradisional mungkin kita tinggal hit API dari tiap service, tapi lama-lama terlalu banyak API yang harus di-manage hanya untuk memberitahu user lain untuk melakukan A dan B, belum lagi kita perlu handle untuk failure case misal salah satu server tidak bisa diakses dan sebagainya.
Saat itulah kita perlu sebuah message-broker atau bahasa sehari-harinya makelar pesan yang bertugas mengirimkan event. Langsung aja ke contoh ya wkwkkwk
const Redis = require("ioredis"); const redis = new Redis(); const pub = new Redis(); const payload = JSON.stringify({ orderID: 1, productIDs: [45,32], amount: 425000 }) pub.publish("order", payload); // di service backend lainnya redis.on("message", function (channel, message) { if(channel === "order") { console.log(message) } });
Redis sebagai penghitung jarak Geospatial
Bagaimana ojek online menentukan hanya driver dalam radius sekian yang boleh mengambil order kita? Ya, kita bisa menggunakan redis untuk menghitung jarak radius posisi driver dengan posisi restaurant atau posisi kita. Langsung ke contoh kode aja yuk.
// dummy long lat ya guys const address = { id: 3, name: 'Rumah Osby', longitude: 0.0, latitude: 0.0, } const store = { id: 1, name: 'Martabak Ena', longitude: 0.0, latitude: 0.0, } const geoKey = 'store_distance' const sourceMemberName = `${paramCase(store.name)}_${store.id}` const targetMemberName = `${paramCase(addr.name)}_${addr.id}` redis.geoadd(geoKey, store.longitude, store.latitude, sourceMemberName) redis.geoadd(geoKey, addr.longitude, addr.latitude, targetMemberName) const distance = await redis.geodist(geoKey, sourceMemberName, targetMemberName, 'km') console.log(distance) // 1.3
Akhir kata
Masih banyak kasus yang bisa kita selesaikan dengan memanfaatkan redis, beberapa yang kita baca diatas barusan adalah beberapa case yang super umum digunakan.
Pemahaman struktur data sangat penting ketika menggunakan redis agar kita dapat menggunakan redis secara tepat guna. Di dalam dokumentasi redis juga sudah terdapat time-complexity dari setiap operasi redis. Contoh gambar dibawah ini:
Dan selalu ingat, redis sangat bagus digunakan untuk leaderboard dan menghitung, serta menyimpan cache. Mari kita belajar
mengeksploitasimanfaatkan setiap struktur data yang ada di redis.Link terkait:
-
@Doni-Wirawan welcome to the club!! Jgn ragu kalo mau nanya2 atau sharing hasil belajar