Belajar Redis: Tipe data String pada Redis

Tipe data String pada dunia pemrograman sangat banyak digunakan. Redis memiliki juga tipe data String untuk menyimpan data string pada umumnya. Pada Redis, tipe data String ini ada batasannya yaitu 512 MB. Lebih dari itu, kawan-kawan tidak bisa menggunakan tipe data ini ya. (kebayang string sampe lebih dari 512 isinya apa ya? hehe)

Sebelumnya, pastikan ya di komputer kawan-kawan terinstall redis untuk mencoba belajar redis bagian tipe data string pada redis ini.

Perintah SET, GET, MSET, MGET

Lanjut ke perintah apa aja yang bisa dipakai di tipe data String ini pada redis. Kawan-kawan tentu bisa menggunakan perintah SET dan GET pada tipe data string ini. Kawan-kawan juga bisa menggunakan MSET dan MGET pada tipe data String pada redis ini.

Contohnya adalah saya membuat tipe data string dengan MSET dan MGET seperti berikut ini.

redis tipe data string 1

Terlihat pada gambar diatas, awalnya kawan-kawan ketik dulu untuk menjalankan redis yaitu redis-cli. Setelah itu saya ketik perintah MSET lalu diikuti dengan KEY yaitu first dan diikuti dengan value yang berisi tipe data String yaitu “ini kalimat pertama”. Setelah value dari KEY first ini, saya tambahkan juga KEY second dengan value “ini kalimat kedua”. Tekan enter sampai tertulis “OK”.

Setelah itu kawan-kawan bisa mengambil data string yang kita set sebelumnya itu dengan perintah MGET dengan beberapa KEY yang telah dibuat. Misalnya saya tulis “MGET first second”. Ketika di enter akan muncul value dari KEY ‘first’ dan KEY ‘second’. Kawan-kawan juga bisa memanggil dengan perintah single GET KEY seperti memanggil dengan GET first atau GET second.

Sesuai dengan namanya MGET dan MSET artinya adalah Multiple GET dan Multiple SET. Kawan-kawan bisa set multiple key dengan MSET dan get multiple key dengan MGET.

Perintah STRLEN

Untuk menghitung jumlah panjang value pada key tertentu, kawan-kawan bisa menggunakan STRLEN. Contohnya bisa seperti berikut:

127.0.0.1:6379> MGET first second
1) "ini kalimat pertama"
2) "ini kalimat kedua"
127.0.0.1:6379> STRLEN first
(integer) 19

Terlihat pada kode diatas, saya panggil STRLEN first. dimana first adalah key dari value “ini kalimat pertama”. Lalu jika dihitung ada 19 karakter ya 🙂

Perintah SETEX

Kawan-kawan juga bisa menggunakan SETEX. Perintah SETEX pada redis digunakan untuk menge-set value tertentu dengan syarat akan hilang dalam detik yang ditentukan.

SETEX redis

Pada gambar diatas, saya coba set key “kopi” dengan expired time dalam detik yaitu 20 detik lalu diikuti value dari key yang inginkan. Ketika saya panggil GET berkali-kali masih muncul, namun setelah lebih dari 20 detik akan hilang (nil) dari memory. Jadi itulah perintah SETEX pada redis.

Perintah DEL

Setelah kita belajar GET dan SET serta multiplenya, tanpa waktu expired, kita bisa langsung menghapus nilai dari key tertentu. Caranya bagaimana? nah kita bisa menggunakan perintah DEL pada redis.

Perintah DEL Redis

Kawan-kawan bisa lihat saya set key ‘nama’ dengan value ‘adiputra’. Lalu saya coba delete dengan perintah del sebanyak 2 kali. Pada perintah pertama akan mengeluarkan nilai 1, itu tanda proses delete berhasil. Pada perintah kedua mengeluarkan nilai 0 menjadi tanda proses delete gagal. Kenapa bisa gagal? Bener…datanya diawal kan sudah hilang ya..:)

Penasaran masih gak percaya itu sudah dihapus? kawan-kawan bisa panggil dengan perintah GET nama. Apa masih muncul? keluar nil ya 😀

Perintah GETSET

Perintah yang sering dilakukan di tipe data string atau juga tipe data lain adalah perintah GETSET. Apa arti perintah GETSET itu ya? Secara sederhana ini adalah proses update value dari key yang ingin kita update. Misalnya gini, kawan-kawan pertama set key ‘nama’ dengan value ‘adiputra’, lalu kawan-kawan ingin mengganti key ‘nama’ menjadi value ‘anas’. Apa yang kawan-kawan lakukan?

Yap, delete key nama, buat key nama baru. Nah dengan perintah GETSET ini, kawan-kawan tidak perlu menghapus key tersebut. Kawan-kawan bisa langsung meng-update data key tersebut dengan perintah GETSET ini.

Perintah GETSET Redis

Jika kawan-kawan lihat gambar diatas, terlihat saya set nama dengan value adiputra, lalu saya getset nama menjadi anas. Terlihat saat GETSET nama anas ada keluaran nama “adiputra” ya. Redis mengeluarkan nilai yang telah di update namun data yang baru akan disimpan pada key ‘nama’. Jika kawan-kawan lihat kembali gambar diatas, Saya ketik GET nama mengeluarkan nilai ‘anas’.

Tanpa perlu menghapus key, kita bisa langsung meng-update nilai key tersebut. Keren!

Kawan-kawan mungkin ada yang bertanya, bagaimana jika memang GETSET key tersebut dalam keadaan key belum ada pada redis? Nah tetep akan meng-set key terbaru dengan value terbaru walaupun key belum ada di redis.

Perintah GETSET jika kosong

Terlihat pada gambar diatas, saya coba GETSET pada key yang kosong pada redis maka mengeluarkan nilai nil, namun tetep ketika kita panggil GET akan mengeluarkan nilai terbaru yang kita set yaitu ‘budi’.

Perintah SETNX

Salah satu perintah menarik lagi yaitu perintah SETNX.

[berlanjut]

Queue Proses dengan Celery

Proses antrian/queue pada artikel sebelumnya saya tulis dengan Laravel sudah dijelaskan bagaimana antrian bisa menghandle proses-proses yang memakan waktu lama, istilahnya kita jalankan di background system. Penasaran saya coba bagaimana Python melakukan hal yang sama. Setelah searching, ketemu Celery. Salah satu yang banyak digunakan oleh developer Python untuk membuat queue job pada aplikasi mereka. Pengguna salah satu ternama adalah Instagram, waw 🙂

Pada laravel, broker atau pengantar job/message bisa menggunakan Redis, RabitMQ, Database, ataupun SQS nya Amazon. Di Celery pun hampir semua bisa digunakan dan satu lagi kita bisa menyimpan hasil dari queue ke database atau nosql database, istilahnya backend result.

Penasaran, saya mau coba sederhana membuat task queue Celery dengan Python. Dan saya menemukan artikel yang mudah dan enak sekali dibaca.

https://www.agiliq.com/blog/2015/07/getting-started-with-celery-and-redis/

Sayangnya, artikel sudah 2015 ditulis, jadi mungkin ada perubahan. Btw, artikel ini enak banget dibaca dan mari kita coba implementasi sederhana.

Awalnya saya buat virtualenv dengan python 3 di folder project kita.

virtualenv venv -p python3

Lalu saya activekan virtual env dengan perintah

source venv/bin/activate

Setelah aktif, saya install Celery dan Requests karena pada artikel tersebut mencoba menjelaskan bagaimana mengakses (curl di php) website dengan python.

Install Celery

pip install -U "[celery-redis]"

Karena saya ingin menggunakan broker redis, maka install celery seperti diatas :), jika ingin menggunakan RabitMQ, installnya beda ya, coba cek documentasinya.

Setelah itu saya install requests

pip install requests

Seperti biasa, saya biasa membuat folder src lalu didalamnya berisi file app.py. Kode dari file tersebut adalah sebagai berikut:

from celery import Celery
import requests

app = Celery('app', broker='redis://localhost:6379/0')

@app.task
def fetch_url(url):
    resp = requests.get(url)
    print(resp.status_code)

def func(urls):
    for url in urls:
        fetch_url.delay(url)

if __name__ == "__main__":
    func(["http://google.com", "https://amazon.com", "https://facebook.com", "https://twitter.com", "https://alexa.com"])

Pada kode tersebut saya import celery lalu requests. Lalu saya buat object celery dengan nama app. Lalu terlihat ada broker url (redis) yang saya gunakan. Dari sini saja kita harus mengaktifkan redis-server pada linux kita. Jika ada yang belum ada redis, jangan lupa install dulu ya.


[crp]


Sampai disitu, saya masukan decorator celery @app.task, dimana decorator tersebut memberikan flag/tanda bahwa fungsi tertentu (dalam hal ini fetch_url()) adalah fungsi yang bisa dijalankan dengan queue celery.

Dalam blok fungsi fetch_url() sederhana saja mengakses website lalu jika berhasil print kode hasil request.

Setelah itu, main fungsi adalah memanggil fungsi def func(urls), yang berisi list url website yang ingin diakses. Nah pada fungsi tersebut kita loop, lalu kita panggil fungsi decorator celery yaitu fetch_url() dengan penambahan fungsi .delay().

def func(urls):
    for url in urls:
        fetch_url.delay(url)

Jika anda tidak menggunakan celery atau queue system, proses ini masti berjalan menunggu hasil dari tiap-tiap website. Namun jika kita menggunakan queue, proses ini dijalankan di background sehingga proses menjadi lebih cepat.

Setelah itu, untuk mencobanya, mari kita coba jalankan perintah untuk mengaktifkan app.py tersebut sebagai celery queue.

celery -A app worker --loglevel=info

Dimana, anda mesti satu level folder dengan app.py. Sehingga akan menampilkan seperti gambar dibawah ini jika berhasil.

Pada gambar diatas, menandakan bahwa Celery anda siap untuk dijalankan. Mari kita coba panggil proses di app.py agar dijalankan oleh Celery sebagai queue.

python src/app.py

Jika dijalankan, proses pasti tidak menunggu lama ya. Dan jika dilihat ke terminal celery akan muncul seperti gambar ini:

Terlihat bahwa proses sudah dijalankan oleh Celery “succeeded”.

Beberapa fitur lain bisa dibaca di documentasi. Penjelasan lebih lengkap juga bisa dilihat di link diatas. Selamat mencoba 🙂

Menyimpan Cache dan Session pada Redis di Laravel

Untuk mempercepat kerja Laravel yang mungkin pernah denger dari beberapa artikel jika Laravel termasuk framework yang berat adalah dengan mencari cara agar lebih cepat. Salah satu teknik untuk mempercepat kinerja Laravel adalah simpan data cache dan session dengan Redis. Redis sendiri sudah mulai digunakan oleh banyak perusahaan kenamaan seperti twitter. Jadi apa salahnya kita coba untuk menggunakan dan mengimplementasikan proyek Laravel kita dengan redis ini 🙂
Continue reading Menyimpan Cache dan Session pada Redis di Laravel

Mengenal Redis – Teori Sederhana

Saat ini lagi main redis karena kerjaan yang nuntut pakai redis. Awalnya hanya tahu kalau redis seperti MongoDB saja yang database disimpan dalam bentuk json. Namun setelah dibaca-baca lagi dan ngobrol dengan yang lebih tahu, ternyata redis keren banget. Continue reading Mengenal Redis – Teori Sederhana