Banyak developer menggunakan Redis untuk meng-cache data karena Redis menyimpan data di RAM. Cache di Redis dapat mengurangi beban ke database atau external service. Data yang di simpan di Redis memiliki expire time, sehingga Redis dapat membebaskan memoru yang sudah tidak dipakai. Pada artikel ini akan dijelaskan cara untuk integrasi ke Redis pada bahasa pemrograman Go.
Ada beberapa client library untuk menggunakan Redis di Golang. Kita akan menggunakan https://github.com/gomodule/redigo pada artikel ini. Library tersebut merupakan salah satu library yang di rekomendasikan. Kamu bisa lihat di https://redis.io/clients#go untuk beberapa libary lainnya.
Gunakan Connection Pool Untuk Akses Redis
Untuk aplikasi yang menghandle traffic yang tinggi, sangat direkomendasi kan untuk menggunakan connection pool untuk mengakses Redis. Ketika kita akan mengakses Redis, kita mengambil connection dari pool, kemudian mengembalikannya lagi setelah dipakai. Sehingga connection nya bisa di reuse. Connection juga aman digunakan secara concurrent. Connection dapat di test sebelum dikembalikan ke pool menggunakan fungsi TestOnBorrow
. Apabila test menghasilkan error, connection tersebut akan di tutup.
Code untuk membuat connection pool:
import (
"github.com/gomodule/redigo/redis"
)
// ...
pool = &redis.Pool{
MaxIdle: 5,
IdleTimeout: 60 * time.Second,
Dial: func() (redis.Conn, error) { return redis.Dial("tcp", "localhost:6379") },
TestOnBorrow: func(c redis.Conn, t time.Time) error {
if time.Since(t) < time.Minute {
return nil
}
_, err := c.Do("PING")
return err
},
}
Untuk membaca atau menulis data, kita ambil satu koneksi dari pool, gunakan koneksi itu, kemudian kembalikan lagi ke pool. Kita menggunakan fungsi Do
untuk mengeksekusi command ke Redis.
Set Value ke Redis
Tipe data yang paling simple di redis adalah format key-value. Sebuah string disimpan ke Redis dengan sebuah key indentifier. Memberikan expire time ke sebuah value adalah optional, tapi sangat direkomendasikan untuk selalu memberikan expire time. Kita menggunakan command SET untuk menyimpan sebuah data. Untuk menggunakan nya di Go:
conn := pool.Get()
defer conn.Close()
reply, err := redis.String(conn.Do("SET", key, value, "EX", expireInSeconds))
// reply is `OK` if success
//
...
Pertama, kita mengambil sebuah connection dengan pool.Get()
dan defer conn.Close()
untuk memastikan connection dikembalikan ke pool setelah digunakan. Kita gunakan connection tersebut untuk mengeksekusi command SET
untuk menyimpan value dengan expire time. Expire time di sini dalam satuan detik. redis.String
adalah fungsi helper untuk meng-convert hasil dari command menjadi string. Kita akan mendapatkan OK
sebagai reply apabila berhasil.
Get Value dari Redis
Langkah-langkah yang digunakan untuk mengambil data dari Redis hampir sama dengan langkah-langkah untuk menyimpan data. Untuk mengambil data, kita menggunakan command GET. Dibawah ini adalah contoh code dalam Go.
conn := pool.Get()
defer conn.Close()
reply, err := redis.String(conn.Do("GET", key))
// you will get the data in reply
...
Kita akan mendapatkan hasilnya pada reply. Untuk mengetahui berapa detik waktu expire yang tersisa, kita bisa gunakan command TTL
.
Kesimpulan
Salah satu kegunaan Redis adalah untuk meng-cache resource. Redis dipilih karena cepat. Kita dapat meng-cache database atau external resource yang membutuhkan API call. Artikel ini hanya menunjukkan penggunaan Redis yang paling mendasar dengan Go. Akan tetapi kita dapat membuat caching yang sangat berguna dengan fungsi-fungsi dasar ini. Selain ini, masih ada banyak fitur-fitur Redis yang lebih komplex yang dapat kita gunakan.