Episode ini membahas tiga struktur untuk use case khusus: Bitmaps untuk tracking aktivitas dengan 1 bit per user, Bitfields untuk menyimpan integer compact dalam satu string, serta geospatial indexes dengan GEOADD dan GEOSEARCH untuk pencarian berbasis jarak dan radius.

Episode 6 mengajak kalian menelusuri Streams. Sekarang kita beralih ke tiga struktur dengan fokus use case spesifik: Bitmaps, Bitfields, dan Geospatial Indexes.
Bitmaps memanfaatkan string sebagai array bit — 1 bit per user untuk tracking aktivitas, sangat hemat memori. Bitfields menyimpan deretan integer kecil dalam satu string secara compact. Dan geospatial indexes memungkinkan Redis mencari lokasi terdekat dalam radius — dari "restoran di sekitar saya" sampai driver matching untuk ride-hailing. Mari kita bedah.
String Redis bisa diinterpretasikan sebagai array bit. Setiap user mendapat satu bit; posisi bit adalah ID user. SETBIT dan GETBIT mengatur dan membaca bit tersebut:
redis-cli SETBIT dau:2026-08-03 1001 1
redis-cli SETBIT dau:2026-08-03 2002 1
redis-cli GETBIT dau:2026-08-03 1001SETBIT dau:2026-08-03 1001 1 menandai user 1001 aktif pada tanggal itu. GETBIT mengecek status. Satu key string sepanjang 8 bit hanya memakai 1 byte — untuk satu juta user, seluruh bitmap cukup sekitar 125KB. Bandingkan dengan menyimpan satu juta key!
redis-cli BITCOUNT dau:2026-08-03
redis-cli BITOP AND dau:week dau:2026-08-03 dau:2026-08-04BITCOUNT menghitung berapa bit bernilai 1 — total active user hari itu. BITOP AND menggabungkan beberapa bitmap dengan operator AND, OR, XOR, atau NOT. dau:week yang dihasilkan berisi bit 1 hanya untuk user yang aktif di kedua hari — pola perhitungan retention (user yang aktif konsisten).
BITFIELD mengemas beberapa integer bertipe u (unsigned) atau i (signed) dengan lebar bit tertentu ke dalam satu string. Ini sangat berguna untuk telemetry ringan atau banyak counter kecil:
redis-cli BITFIELD sensor:packet SET u8 #0 100 SET u8 #1 200
redis-cli BITFIELD sensor:packet GET u8 #0 GET u8 #1BITFIELD sensor:packet SET u8 #0 100 SET u8 #1 200 menulis dua integer unsigned 8-bit: byte 0 bernilai 100, byte 1 bernilai 200. GET membaca keduanya. #N adalah offset berbasis jenis (#0 berarti offset 0). Hasilnya: dua angka dalam satu key kecil, tanpa overhead dua key terpisah.
redis-cli BITFIELD counter:stats INCRBY u8 #0 5BITFIELD counter:stats INCRBY u8 #0 5 menambah nilai bitfield secara atomik. Dengan opsi OVERFLOW SAT atau WRAP, kalian bisa mengontrol perilaku saat nilai melewati batas tipe — misalnya counter 8-bit yang otomatis berhenti di 255.
Redis menyimpan koordinat geografis dalam sorted set ber-score geohash — oleh karena itu semua operasi geolokasi cepat dan mendukung radius search:
redis-cli GEOADD locations 106.845 -6.208 "Jakarta"
redis-cli GEOADD locations 110.369 -7.801 "Yogyakarta"
redis-cli GEOADD locations 112.751 -7.289 "Surabaya"GEOADD locations 106.845 -6.208 "Jakarta" menambahkan Jakarta pada koordinat longitude 106.845, latitude -6.208. Perhatikan urutan: longitude dulu, lalu latitude.
redis-cli GEODIST locations Jakarta Yogyakarta kmGEODIST locations Jakarta Yogyakarta km menghitung jarak garis lurus antara dua member dalam kilometer. Untuk mencari lokasi dalam radius:
redis-cli GEOSEARCH locations FROMLONLAT 106.845 -6.208 BYRADIUS 300 km ASCGEOSEARCH locations FROMLONLAT 106.845 -6.208 BYRADIUS 300 km ASC mencari semua lokasi dalam radius 300 km dari koordinat Jakarta, diurutkan dari terdekat. GEOSEARCH adalah versi modern yang menggantikan GEORADIUS yang deprecated — mulai sekarang biasakan memakai GEOSEARCH.
Untuk melengkapi toolkit geospatial, dua perintah pembaca ini sering berguna:
redis-cli GEOPOS locations Jakarta
redis-cli GEOHASH locations JakartaGEOPOS menampilkan kembali koordinat longitude/latitude yang tersimpan untuk sebuah member. GEOHASH menampilkan representasi geohash — berguna untuk membandingkan kedekatan antar lokasi atau berbagi data dengan sistem lain yang memakai standar geohash.
Info
Jarak yang dihitung Redis adalah great-circle distance (jarak garis lurus di permukaan bola bumi), bukan jarak berkendara. Untuk estimasi waktu perjalanan, kombinasikan dengan API routing eksternal.
BITOP AND antar hari untuk user yang aktif berkelanjutan.GEOSEARCH untuk restoran terdekat, ride-hailing driver matching, dan geofencing.Episode 7 membekali kalian Bitmaps untuk tracking hemat memori, Bitfields untuk integer compact, dan geospatial indexes untuk pencarian berbasis lokasi: SETBIT/BITCOUNT/BITOP, BITFIELD SET/INCRBY, serta GEOADD/GEODIST/GEOSEARCH.
Inti yang harus dibawa pulang:
BITCOUNT menghitung bit aktif; BITOP menggabungkan bitmap untuk retention.BITFIELD mengemas banyak integer kecil dalam satu key dengan kontrol overflow.GEOADD butuh urutan longitude lalu latitude.GEOSEARCH menggantikan GEORADIUS untuk pencarian radius modern.GEOPOS dan GEOHASH melengkapi pembacaan data geospatial.Di episode 8 selanjutnya kita membahas Pub/Sub Messaging & Keyspace Notifications — mekanisme broadcast real-time. Kalian akan belajar SUBSCRIBE/PUBLISH, pattern-based subscription, perbedaan fundamental Pub/Sub vs Streams, serta memanfaatkan keyspace notifications untuk cache invalidation. Lanjut!