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 denganOOM 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 berhenti | Hanya snapshot (bawaan) | Dengan file AOF |
|---|---|---|
systemctl restart | Tidak ada yang hilang: menyimpan saat dimatikan | Tidak ada yang hilang |
Dimatikan dengan kill -9 | Kunci setelah snapshot terakhir hilang | Kunci 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:
| Uji | Permintaan per detik | Latensi median |
|---|---|---|
| SET | 30.303 | 1,0 ms |
| GET | 35.149 | 0,9 ms |
| SET, 16 perintah per bolak-balik | 272.109 | 2,4 ms |
| GET, 16 perintah per bolak-balik | 414.938 | 1,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.
Komentar
Belum ada komentar. Jadilah yang pertama.