15%

Hemat 15% di Semua Layanan Hosting

Uji kemampuanmu dan dapatkan Diskon pada paket hosting apa saja

Gunakan kode:

Skills
Memulai
04.11.2024

Menggunakan Perintah Redis Scan pada Linux: Panduan Lengkap

Redis adalah penyimpan struktur data in-memory, open-source, berkinerja tinggi yang banyak digunakan sebagai database key-value, cache, dan message broker. Di antara fitur-fiturnya yang paling powerful — namun sering kurang dimanfaatkan — adalah scan commands, yang memungkinkan Anda untuk melakukan iterasi secara bertahap melalui dataset besar tanpa memblokir server atau menurunkan performa.

Jika Anda menjalankan Redis pada server berbasis Linux, menguasai scan commands sangat penting untuk membangun aplikasi yang scalable dan production-ready. Tidak seperti perintah KEYS yang berbahaya, yang mengambil semua kunci yang cocok dalam satu operasi blocking, scan commands mengembalikan data dalam batch kecil yang dapat dikelola — menjadikannya alat yang tepat untuk lingkungan apa pun yang menangani volume data signifikan.

Dalam panduan komprehensif ini, Anda akan mempelajari dengan tepat cara menggunakan SCAN, SSCAN, HSCAN, dan ZSCAN di Redis pada Linux, lengkap dengan contoh dunia nyata, shell script, dan best practice untuk deployment production.

Apa Itu Redis Scan Commands?

Redis scan commands menyediakan mekanisme berbasis cursor, non-blocking untuk melakukan iterasi atas kunci, set, hash, dan sorted set. Setiap perintah mengembalikan subset kecil dari elemen per panggilan bersama dengan nilai cursor, yang Anda gunakan untuk melanjutkan iterasi dalam panggilan berikutnya. Ketika cursor kembali ke 0, dataset lengkap telah ditraversi.

Pendekatan ini secara fundamental lebih aman dan lebih efisien daripada KEYS, yang memblokir seluruh server Redis sampai selesai scanning — masalah kritis di lingkungan production dengan jutaan kunci.

Empat Core Scan Commands

CommandTujuan
SCANMelakukan iterasi atas kunci di seluruh keyspace
SSCANMelakukan iterasi atas elemen dalam sebuah Set
HSCANMelakukan iterasi atas field dan value dalam sebuah Hash
ZSCANMelakukan iterasi atas member dan score dalam sebuah Sorted Set

Syntax Dasar Scan Commands

Keempat scan commands berbagi struktur syntax yang konsisten:

SCAN cursor [MATCH pattern] [COUNT count]
SSCAN key cursor [MATCH pattern] [COUNT count]
HSCAN key cursor [MATCH pattern] [COUNT count]
ZSCAN key cursor [MATCH pattern] [COUNT count]

Parameter Dijelaskan

  • cursor — Sebuah integer yang mewakili posisi saat ini dalam iterasi. Selalu mulai dengan 0 untuk memulai scan baru. Redis mengembalikan cursor baru dengan setiap response; gunakan dalam panggilan berikutnya untuk melanjutkan.
  • MATCH pattern *(opsional)* — Memfilter hasil menggunakan glob-style pattern matching (misalnya, user:*, *session*). Catatan: filtering terjadi *setelah* retrieval, jadi kecocokan low-density mungkin memerlukan banyak iterasi.
  • COUNT count *(opsional)* — Sebuah hint ke Redis yang menyarankan berapa banyak elemen yang akan dikembalikan per iterasi. Ini bukan hard limit; Redis mungkin mengembalikan lebih banyak atau lebih sedikit. Default adalah 10.

Menginstal Redis pada Linux

Sebelum menggunakan scan commands, Anda perlu Redis terinstal dan berjalan pada server Linux Anda. Baik Anda berada di lingkungan production dengan traffic tinggi atau mesin development, proses instalasi sangat mudah.

> Tip: Untuk workload production yang memerlukan Redis dalam skala besar, pertimbangkan untuk deploy pada paket VPS Hosting atau Dedicated Server untuk memastikan Anda memiliki memory, CPU, dan resource I/O yang Redis butuhkan.

Menginstal Redis pada Debian/Ubuntu

sudo apt update
sudo apt install redis-server -y

Menginstal Redis pada CentOS/RHEL

sudo yum install redis -y

Memulai Redis Service

sudo systemctl start redis
sudo systemctl enable redis

Memverifikasi Instalasi

sudo systemctl status redis

Anda seharusnya melihat active (running) dalam output. Sekarang hubungkan ke Redis CLI:

redis-cli

Setelah berada di dalam CLI, test koneksi:

127.0.0.1:6379> PING
PONG

Anda siap untuk mulai menggunakan scan commands.

Menggunakan SCAN Command

Perintah SCAN melakukan iterasi atas semua kunci dalam Redis keyspace. Ini adalah pengganti general-purpose untuk perintah KEYS di lingkungan production.

Contoh 1: Basic SCAN

Untuk mulai scanning semua kunci dalam database, mulai dengan cursor 0:

SCAN 0

Sample output:

1) "14"
2) 1) "session:abc123"
   2) "user:1001"
   3) "product:55"

Elemen pertama (14) adalah next cursor. Gunakan dalam panggilan SCAN berikutnya Anda. Ketika cursor yang dikembalikan adalah 0, iterasi penuh selesai.

Contoh 2: Memfilter Kunci dengan MATCH

Untuk mengambil hanya kunci yang cocok dengan pola spesifik — misalnya, semua kunci dengan prefix user::

SCAN 0 MATCH user:*

Ini mengembalikan hanya kunci yang namanya dimulai dengan user:. Terus melakukan iterasi sampai cursor mengembalikan 0 untuk memastikan Anda telah scanning seluruh keyspace.

Contoh 3: Mengontrol Batch Size dengan COUNT

Untuk menyarankan bahwa Redis mengembalikan sekitar 100 kunci per iterasi:

SCAN 0 COUNT 100

Ingat: COUNT adalah sebuah *hint*, bukan jaminan. Redis mungkin mengembalikan hasil sedikit lebih banyak atau lebih sedikit tergantung struktur data internal.

Contoh 4: Full Keyspace Iteration dengan Shell Script

Dalam skenario dunia nyata, Anda perlu melakukan loop melalui seluruh keyspace secara programmatic. Berikut adalah script Bash production-ready yang melakukan iterasi melalui semua kunci yang cocok dengan pola:

#!/bin/bash

cursor=0
echo "Starting full keyspace scan..."

while true; do
    # Execute SCAN and capture the result
    result=$(redis-cli SCAN $cursor MATCH user:* COUNT 100)

    # Extract the new cursor (first line of output)
    cursor=$(echo "$result" | head -n 1)

    # Extract and display the keys (remaining lines)
    keys=$(echo "$result" | tail -n +2)
    echo "Keys found:"
    echo "$keys"

    # Break the loop when cursor returns to 0
    if [[ "$cursor" == "0" ]]; then
        echo "Scan complete."
        break
    fi
done

Untuk menjalankan script ini:

chmod +x scan_keys.sh
./scan_keys.sh

Menggunakan SSCAN Command

SSCAN digunakan untuk melakukan iterasi secara bertahap melalui member dari sebuah Redis Set. Ini mengikuti pola berbasis cursor yang sama seperti SCAN.

Langkah 1: Buat Set dan Tambahkan Member

SADD myset "apple"
SADD myset "banana"
SADD myset "cherry"
SADD myset "date"
SADD myset "elderberry"
SADD myset "mango"
SADD myset "mango:tropical"
SADD myset "mango:dried"

Langkah 2: Basic SSCAN

Scan semua elemen dalam myset mulai dari cursor 0:

SSCAN myset 0

Langkah 3: Memfilter Elemen dengan MATCH

Untuk mengambil hanya elemen yang cocok dengan pola mango:*:

SSCAN myset 0 MATCH mango:*

Langkah 4: Melakukan Iterasi Melalui Set dengan Shell Script

#!/bin/bash

cursor=0
echo "Scanning through myset:"

while true; do
    # Scan the set
    result=$(redis-cli SSCAN myset $cursor COUNT 10)

    # Update cursor
    cursor=$(echo "$result" | head -n 1)

    # Print elements returned
    elements=$(echo "$result" | tail -n +2)
    echo "Elements: $elements"

    # Stop when cursor returns to 0
    if [[ "$cursor" == "0" ]]; then
        echo "Set scan complete."
        break
    fi
done

Simpan sebagai scan_myset.sh, buat executable, dan jalankan:

chmod +x scan_myset.sh
./scan_myset.sh

Menggunakan HSCAN Command

HSCAN melakukan iterasi melalui field dan value dari sebuah Redis Hash. Ini sangat berguna ketika hash berisi ratusan atau ribuan field dan Anda perlu memproses mereka tanpa memuat semuanya ke memory sekaligus.

Langkah 1: Buat Hash dan Tambahkan Field

HSET myhash name "John Doe"
HSET myhash age "30"
HSET myhash occupation "Software Developer"
HSET myhash city "San Francisco"
HSET myhash country "USA"
HSET myhash email "john@example.com"

Langkah 2: Basic HSCAN

HSCAN myhash 0

Sample output:

1) "0"
2) 1) "name"
   2) "John Doe"
   3) "age"
   4) "30"
   5) "occupation"
   6) "Software Developer"
   ...

Hasil dikembalikan sebagai pasangan field-value yang bergantian.

Langkah 3: Memfilter Hash Field dengan MATCH

Untuk mengambil hanya field yang namanya berisi "city" atau cocok dengan pola:

HSCAN myhash 0 MATCH *city*

Langkah 4: Melakukan Iterasi Melalui Hash dengan Shell Script

#!/bin/bash

cursor=0
echo "Scanning hash: myhash"

while true; do
    result=$(redis-cli HSCAN myhash $cursor COUNT 10)
    cursor=$(echo "$result" | head -n 1)
    fields=$(echo "$result" | tail -n +2)

    echo "Fields and values:"
    echo "$fields"

    if [[ "$cursor" == "0" ]]; then
        echo "Hash scan complete."
        break
    fi
done

Menggunakan ZSCAN Command

ZSCAN melakukan iterasi melalui member dan score dari sebuah Redis Sorted Set. Sorted set biasanya digunakan untuk leaderboard, priority queue, dan time-series data — semua skenario di mana scanning koleksi besar secara efisien sangat penting.

Langkah 1: Buat Sorted Set dan Tambahkan Member

ZADD mysortedset 1 "apple"
ZADD mysortedset 2 "banana"
ZADD mysortedset 3 "cherry"
ZADD mysortedset 4 "date"
ZADD mysortedset 5 "elderberry"

Langkah 2: Basic ZSCAN

ZSCAN mysortedset 0

Sample output:

1) "0"
2) 1) "apple"
   2) "1"
   3) "banana"
   4) "2"
   5) "cherry"
   6) "3"

Hasil dikembalikan sebagai pasangan member-score yang bergantian.

Langkah 3: Memfilter Member dengan MATCH

Untuk menemukan semua member yang namanya berisi huruf "e":

ZSCAN mysortedset 0 MATCH *e*

Langkah 4: Full Sorted Set Iteration Script

#!/bin/bash

cursor=0
echo "Scanning sorted set: mysortedset"

while true; do
    result=$(redis-cli ZSCAN mysortedset $cursor COUNT 10)
    cursor=$(echo "$result" | head -n 1)
    members=$(echo "$result" | tail -n +2)

    echo "Members and scores:"
    echo "$members"

    if [[ "$cursor" == "0" ]]; then
        echo "Sorted set scan complete."
        break
    fi
done

Scan Command Comparison: Quick Reference

Fitur`SCAN``SSCAN``HSCAN``ZSCAN`
TargetSemua kunciSet memberHash field/valueSorted set member/score
Memerlukan nama kunciTidakYaYaYa
Mendukung MATCHYaYaYaYa
Mendukung COUNTYaYaYaYa
Format outputNama kunciString memberPasangan field-valuePasangan member-score
BlockingTidakTidakTidakTidak

Best Practice untuk Menggunakan Redis Scan Commands di Production

1. Selalu Gunakan SCAN Daripada KEYS di Production

Perintah KEYS adalah single-threaded dan memblokir semua operasi Redis lainnya sampai selesai. Pada database dengan jutaan kunci, ini dapat menyebabkan lonjakan latency yang parah. Jangan pernah gunakan KEYS di production. SCAN adalah alternatif yang benar dan non-blocking.

2. Tune COUNT Berdasarkan Ukuran Dataset Anda

Untuk dataset kecil (< 1.000 kunci), default COUNT 10 sudah cukup. Untuk dataset besar, tingkatkan COUNT ke 1001000 untuk mengurangi jumlah round trip sambil menjaga response individual tetap dapat dikelola.

3. Jangan Andalkan MATCH Saja untuk Efisiensi

Filter MATCH diterapkan *setelah* Redis mengambil elemen secara internal. Jika pola Anda hanya cocok dengan sebagian kecil dari kunci, Redis masih melakukan scan dataset lengkap secara internal. Gunakan konvensi penamaan kunci (misalnya, prefix yang konsisten) untuk membuat MATCH lebih efektif.

4. Proses Hasil dalam Batch

Jangan pernah mengakumulasi semua hasil scan dalam memory sebelum memproses. Sebaliknya, proses setiap batch segera saat dikembalikan. Ini sangat penting pada server dengan memory terbatas.

5. Tangani Cursor State dengan Hati-hati

Selalu inisialisasi cursor ke 0 dan update dengan setiap response. Jika aplikasi Anda crash di tengah-tengah scan, mulai ulang dari 0. Cursor Redis tidak persistent di seluruh restart server.

6. Test Secara Menyeluruh di Development Terlebih Dahulu

Sebelum deploy scan-based logic ke production, validasi di lingkungan staging dengan dataset yang representatif. Verifikasi bahwa loop Anda dengan benar terminate ketika cursor kembali ke 0.

7. Amankan Instance Redis Anda

Redis tidak boleh pernah exposed ke public internet tanpa authentication. Gunakan requirepass dalam konfigurasi Redis Anda, bind ke localhost atau private network interface, dan gunakan firewall rules untuk membatasi akses.

Memilih Lingkungan Hosting yang Tepat untuk Redis

Performa Redis secara langsung terikat pada available RAM, CPU speed, dan network latency. Memilih infrastruktur hosting yang tepat sama pentingnya dengan menulis efficient Redis commands.

  • Development dan small project: Shared Web Hosting mungkin cukup untuk lightweight Redis usage, meskipun dedicated Redis instance selalu lebih disukai.
  • Growing application: Paket VPS Hosting memberikan Anda dedicated resource, root access, dan kemampuan untuk tune konfigurasi Redis (maxmemory, persistence setting, dll) sesuai kebutuhan exact Anda.
  • High-traffic production system: Dedicated Servers menyediakan maximum RAM dan CPU resource yang dapat digunakan Redis, menghilangkan resource contention sepenuhnya.
  • AI dan ML workload menggunakan Redis sebagai vector store: GPU Hosting menawarkan computational power yang dibutuhkan untuk embedding generation dan similarity search bersama Redis.

Untuk aplikasi yang juga memerlukan web control panel untuk manajemen yang lebih mudah, VPS dengan cPanel menyediakan interface user-friendly bersama full server control.

Troubleshooting Common Issues

15%

Hemat 15% di Semua Layanan Hosting

Uji kemampuanmu dan dapatkan Diskon pada paket hosting apa saja

Gunakan kode:

Skills
Memulai