Episode ini membahas tiga struktur koleksi unik: Sets untuk operasi himpunan dan tag, Sorted Sets untuk leaderboard dan priority queue, serta HyperLogLog untuk menghitung unique visitor dengan memori konstan sekitar 12KB.

Setelah Lists dan Hashes di episode 4, sekarang kita membahas tiga struktur yang berhubungan dengan koleksi unik: Sets, Sorted Sets, dan HyperLogLog.
Sets memberi kalian operasi himpunan seperti irisan dan gabungan — sempurna untuk tag dan deteksi keanggotaan. Sorted Sets menambahkan score untuk ranking — fondasi leaderboard dan priority queue. Terakhir, HyperLogLog adalah trik ajaib untuk menghitung jutaan unik visitor dengan memori yang hampir tidak bertambah. Mari kita bedah satu per satu.
Set menampung elemen unik tanpa urutan. Elemen yang sama tidak bisa ditambahkan dua kali:
redis-cli SADD tags:post:1 "redis" "database" "cache"
redis-cli SREM tags:post:1 "cache"
redis-cli SMEMBERS tags:post:1SADD tags:post:1 "redis" "database" "cache" menambahkan tiga tag, SREM menghapus satu, SMEMBERS menampilkan semua. Keanggotaan dan jumlah:
redis-cli SISMEMBER tags:post:1 "redis"
redis-cli SCARD tags:post:1SISMEMBER mengembalikan 1 jika elemen ada — operasi O(1) yang sangat murah untuk pengecekan keanggotaan. SCARD menghitung jumlah elemen.
Inilah kekuatan Set yang tidak dimiliki tipe data lain:
redis-cli SINTER tags:post:1 tags:post:2
redis-cli SUNION tags:post:1 tags:post:2
redis-cli SDIFF tags:post:1 tags:post:2SINTER memberi irisan (tag yang muncul di kedua post), SUNION gabungan, SDIFF selisih. Use case nyata: rekomendasi konten ("user yang menyukai A juga menyukai B"), deteksi anomali, dan fitur "orang yang mungkin kalian kenal".
Sorted Set mirip Set, tapi tiap elemen punya score numerik yang menentukan urutan:
redis-cli ZADD leaderboard 100 "player1"
redis-cli ZADD leaderboard 250 "player2"
redis-cli ZRANGE leaderboard 0 -1 WITHSCORES
redis-cli ZREVRANGE leaderboard 0 -1ZADD leaderboard 100 "player1" menambahkan player dengan score 100. ZRANGE mengurutkan ascending, ZREVRANGE descending — pola standar leaderboard. Score yang sama ditentukan oleh leksikografis member.
redis-cli ZSCORE leaderboard "player2"
redis-cli ZREVRANK leaderboard "player2"
redis-cli ZINCRBY leaderboard 50 "player2"ZSCORE menampilkan score seorang member, ZREVRANK posisi peringkatnya (0 = tertinggi), dan ZINCRBY menambah score secara atomik — persis yang dibutuhkan untuk memperbarui skor game real-time.
redis-cli ZRANGEBYSCORE leaderboard 100 200ZRANGEBYSCORE leaderboard 100 200 menampilkan semua member dengan score antara 100 dan 200. Pola ini menjadi dasar sliding window rate limiter (episode 11) dan priority queue berbasis score.
Menghitung jutaan unique visitor secara pasti membutuhkan set besar dan memori besar. HyperLogLog menggunakan estimasi probabilistik: keakuratan sekitar 0.81% error, tapi memori tetap ~12KB berapa pun jumlah elemennya. Redis tidak menyimpan elemennya, hanya memanfaatkan sifat distribusi hash untuk memperkirakan kardinalitas.
redis-cli PFADD visits:2026-08-03 "user-1" "user-2" "user-1"
redis-cli PFCOUNT visits:2026-08-03
redis-cli PFADD visits:2026-08-04 "user-2" "user-3"
redis-cli PFMERGE visits:week1 visits:2026-08-03 visits:2026-08-04PFADD visits:2026-08-03 "user-1" "user-2" "user-1" menambahkan visitor (duplikat diabaikan), PFCOUNT memperkirakan jumlah unik. PFMERGE menggabungkan beberapa HLL — misalnya menghitung unique visitor seminggu dari data harian.
Info
Toleransi error 0.81% hampir selalu cukup untuk dashboard analytics dan perkiraan reach. Jika kalian butuh hitungan eksak untuk kepentingan finansial atau audit, pakai Set atau Sorted Set — dengan harga memori yang jauh lebih besar.
score = timestamp).| Struktur | Sifat | Use Case Khas |
|---|---|---|
| Set | Unik, tanpa urutan, operasi himpunan | Tag, online users |
| Sorted Set | Unik, terurut oleh score | Leaderboard, rate limiter |
| HyperLogLog | Estimasi unik, memori ~12KB | Unique visitor analytics |
Episode 5 membekali kalian Sets dengan operasi himpunan, Sorted Sets untuk ranking berbasis score, dan HyperLogLog untuk estimasi kardinalitas dengan memori konstan: SADD/SINTER, ZADD/ZREVRANK/ZINCRBY, dan PFADD/PFCOUNT/PFMERGE.
Inti yang harus dibawa pulang:
SISMEMBER adalah cek keanggotaan O(1).SINTER/SUNION/SDIFF memberi operasi himpunan untuk rekomendasi dan filter.ZINCRBY memperbarui score atomik; ZRANGEBYSCORE membuka pola rate limiter.Di episode 6 selanjutnya kita membahas Streams — struktur log-based untuk event streaming dan message broker, mirip Apache Kafka tapi built-in di Redis. Kalian akan belajar XADD, consumer groups, acknowledgment, dan pengelolaan pending message. Ini materi favorit banyak backend engineer!