EQVPS
DasborMulai

Cara memasang Redis di VPS: batas memori, persistensi, dan kata sandi yang tidak hilang

Pasang Redis di Ubuntu 24.04, batasi memorinya agar tidak menghabiskan seluruh server, aktifkan file AOF tanpa menghapus data, dan pasang kata sandi yang tetap ada setelah restart. Dua langkah di antaranya punya jebakan yang kami alami sendiri di server uji.

Redis menyimpan data di memori dan menjawab dalam sekitar satu milidetik, karena itu ia ada di balik banyak aplikasi sebagai cache, antrean, atau penyimpanan sesi. Pemasangannya satu perintah. Pekerjaan sebenarnya ada di pengaturan bawaan: tidak ada batas memori, snapshot bisa kehilangan tulisan terbaru, dan ada dua kesalahan mudah yang diam-diam menghapus data atau mematikan kata sandi Anda. Panduan ini membahas semuanya di Ubuntu 24.04. Kami menjalankan setiap langkah di image kami; angka-angkanya dari server Micro (2 vCPU, 2 GB).

Anda perlu pengguna dengan sudo. Panduan menyiapkan Ubuntu membuatkannya.

1. Pasang

sudo apt update
sudo apt install -y redis-server
redis-server --version
redis-cli ping

Pemasangan memakan 13 detik dan memberi kami Redis 7.0.15. Ia langsung berjalan dan menyala di setiap boot, menjawab PONG, dan hanya mendengarkan di server itu sendiri: 127.0.0.1:6379 dan [::1]:6379, dengan protected-mode yes. Tanpa data, ia memakai RAM 13,5 MB.

Log sudah memuat sebuah peringatan:

WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition.

Redis menyimpan ke disk dari salinan dirinya yang dibuat dengan fork, dan dengan pengaturan bawaan kernel, fork itu bisa gagal saat memori sempit. Perbaiki sekali saja:

echo 'vm.overcommit_memory = 1' | sudo tee /etc/sysctl.d/90-redis.conf
sudo sysctl -p /etc/sysctl.d/90-redis.conf
sudo systemctl restart redis-server

Setelah restart, peringatan itu hilang.

2. Batasi memorinya

Dari awal, maxmemory bernilai 0, artinya tanpa batas, dan kebijakannya noeviction. Redis akan terus mengambil RAM sampai server kehabisan. Tetapkan batas atas dan putuskan apa yang terjadi saat batas itu tercapai:

redis-cli CONFIG SET maxmemory 256mb
redis-cli CONFIG SET maxmemory-policy allkeys-lru
redis-cli CONFIG REWRITE

Kami menguji kedua kebijakan dengan batas 64 MB dan 400.000 penulisan:

  • noeviction (bawaan): memori berhenti di 63 MB dan penulisan baru gagal dengan OOM command not allowed when used memory > 'maxmemory'. Tepat untuk antrean atau apa pun yang tidak boleh hilang.
  • allkeys-lru: Redis membuang kunci yang paling lama tidak dipakai, sebanyak 48.606, dan semua penulisan berhasil. Tepat untuk cache.

CONFIG REWRITE menyimpan pengaturan yang sedang berjalan ke /etc/redis/redis.conf agar bertahan setelah restart. Perintah ini juga menambahkan satu baris yang perlu Anda ketahui sebelum langkah 4.

3. Pilih cara menyimpan ke disk

Secara bawaan Redis menulis snapshot (/var/lib/redis/dump.rdb) setelah 1 perubahan dalam satu jam, 100 dalam lima menit, atau 10.000 dalam satu menit. Kami mencoba tiga cara menghentikannya:

Cara Redis berhentiHanya snapshot (bawaan)Dengan file AOF
systemctl restartTidak ada yang hilang: menyimpan saat dimatikanTidak ada yang hilang
Dimatikan dengan kill -9Kunci setelah snapshot terakhir hilangKunci yang ditulis 2 detik sebelumnya masih ada

Pada kedua kasus, systemd menyalakan ulang Redis sendiri dalam hitungan detik.

Jika Redis menyimpan data yang akan Anda rindukan, aktifkan file AOF (append-only file). File ini mencatat setiap penulisan dan menuliskannya ke disk sekali per detik. Lakukan di server yang sedang berjalan, bukan dengan mengedit file:

redis-cli CONFIG SET appendonly yes
redis-cli CONFIG REWRITE
redis-cli INFO persistence | grep aof_

Kami mencoba cara lain lebih dulu, dan itu membuat data kami hilang. Kami mengubah appendonly no menjadi appendonly yes di redis.conf lalu restart. Redis menyala dengan AOF kosong dan tidak memuat apa pun dari snapshot, sehingga semua kunci yang ada lenyap. Saat dimatikan berikutnya, ia juga menulis isi barunya, tanpa kunci lama, menimpa dump.rdb. CONFIG SET menghindari hal ini: Redis lebih dulu menulis AOF dari data di memori. Setelah restart, semua kunci kami tetap ada.

Jika Redis hanya cache yang boleh mulai kosong, lakukan kebalikannya dan matikan penyimpanan dengan redis-cli CONFIG SET save "".

4. Pasang kata sandi

Inilah jebakan kedua. Setelah CONFIG REWRITE apa pun, Redis 7 menambahkan baris ini di akhir redis.conf:

user default on nopass ~* &* +@all

Artinya "pengguna bawaan tidak perlu kata sandi". Lalu kami menambahkan requirepass lebih atas di file dan restart. Redis tetap menjawab PONG tanpa kata sandi, karena baris user lebih diutamakan. Pasang kata sandi lewat Redis sendiri:

REDIS_PASS=$(openssl rand -hex 24)
echo "$REDIS_PASS"
redis-cli CONFIG SET requirepass "$REDIS_PASS"
REDISCLI_AUTH="$REDIS_PASS" redis-cli CONFIG REWRITE

Simpan kata sandi di tempat yang aman. Kini Redis menyimpannya sebagai hash SHA-256 di baris user default yang sama. Setelah restart, redis-cli ping menjawab NOAUTH Authentication required. dan hanya kata sandi yang berhasil. Berikan ke redis-cli lewat variabel REDISCLI_AUTH. Dengan -a, kata sandi terlihat di daftar proses, dan redis-cli memperingatkannya. Di aplikasi, taruh di alamat Redis: redis://:PASSWORD@127.0.0.1:6379/0.

5. Akses dari komputer Anda

Biarkan Redis di 127.0.0.1 dan pakai tunnel SSH. Gunakan port SSH server Anda; di paket NAT ini adalah port pribadi Anda:

ssh -N -L 6380:127.0.0.1:6379 deploy@YOUR_SERVER_IP -p 22

Selama ini berjalan, redis-cli -p 6380 dan alat desktop di komputer Anda berbicara dengan Redis di server. Tidak ada yang baru terbuka ke internet. Dengan panduan kunci SSH, tunnel masuk tanpa kata sandi.

Seberapa cepat

Di server uji Micro, redis-benchmark dengan 50 klien memberi hasil:

UjiPermintaan per detikLatensi median
SET30.3031,0 ms
GET35.1490,9 ms
SET, 16 perintah per bolak-balik272.1092,4 ms
GET, 16 perintah per bolak-balik414.9381,3 ms

Untuk cache atau antrean tugas aplikasi web, ini jauh lebih dari yang Anda butuhkan. Kecepatan tambahannya datang dari mengirim perintah dalam kelompok (pipelining).

Paket mana

Redis butuh RAM untuk data Anda dan hampir tidak butuh yang lain. Nano (2 vCPU, 1 GB, $3/bulan) menjalankan Redis di samping aplikasi kecil dengan maxmemory 256mb. Micro (2 GB, $5/bulan) menyisakan ruang untuk cache yang lebih besar plus aplikasinya. Jika ada yang lain harus terhubung langsung ke Redis, gunakan IPv4 sendiri (mulai Nano-IP seharga $8/bulan) dan izinkan hanya alamat itu di firewall. Semua paket ada di halaman VPS, dan pembayaran dengan USDT, USDC, atau ETH di jaringan Base, Ethereum, atau Polygon.

FAQ

Berapa RAM yang dibutuhkan Redis?

Redis sendiri sangat kecil: 13,5 MB tepat setelah dipasang di server kami. Yang dibutuhkannya adalah ruang untuk data Anda, karena data disimpan di memori. Atur maxmemory sebesar yang bisa diberikan server, misalnya 256 MB di server 1 GB, lalu pilih apa yang terjadi saat penuh.

Redis atau Valkey?

Valkey adalah fork Redis yang berawal dari Redis 7.2 dan memakai protokol yang sama, jadi sebagian besar klien bisa dipakai dengan keduanya. Ubuntu 24.04 hanya menyediakan Redis 7.0.15. Debian 13 punya Redis 8.0 dan Valkey 8.1, sedangkan Debian 12 mendapat Valkey 8.0 dari backports. Langkah-langkah di panduan ini berlaku untuk keduanya.

Kenapa Redis kehilangan data setelah crash?

Secara bawaan Redis menyimpan snapshot ke disk setiap beberapa menit, tergantung berapa banyak kunci yang berubah. Saat kami mematikan prosesnya secara paksa, kunci yang ditulis setelah snapshot terakhir hilang. Aktifkan file AOF yang menulis setiap detik, maka crash paling banyak membuat Anda kehilangan sekitar satu detik tulisan.

Saya sudah menambahkan requirepass di redis.conf, kenapa Redis masih menerima perintah tanpa kata sandi?

Kemungkinan karena CONFIG REWRITE pernah dijalankan. Di Redis 7, perintah itu menambahkan baris user default on nopass ~* &* +@all di akhir redis.conf, dan baris itu membatalkan requirepass yang ditulis di atasnya. Pasang kata sandi dengan CONFIG SET requirepass lalu CONFIG REWRITE, dan Redis akan menyimpannya di baris tersebut.

Bolehkah saya membuka port 6379 ke internet?

Jangan. Port Redis yang terbuka dipindai terus-menerus dan menjadi jalan masuk yang umum ke server. Hubungkan Redis dari komputer Anda lewat tunnel SSH, atau simpan di server yang sama dengan aplikasi yang memakainya.

Komentar

Belum ada komentar. Jadilah yang pertama.

Tinggalkan komentar

Komentar dimoderasi sebelum muncul.