Το Redis κρατά δεδομένα στη μνήμη και απαντά σε περίπου ένα χιλιοστό του δευτερολέπτου, γι' αυτό βρίσκεται πίσω από τόσες εφαρμογές ως cache, ουρά ή αποθήκη sessions. Η εγκατάσταση είναι μία εντολή. Η δουλειά βρίσκεται στις προεπιλογές: κανένα όριο μνήμης, στιγμιότυπα που μπορεί να χάσουν πρόσφατες εγγραφές και δύο εύκολα λάθη που σβήνουν αθόρυβα τα δεδομένα σας ή απενεργοποιούν τον κωδικό σας. Ο οδηγός καλύπτει όλα αυτά σε Ubuntu 24.04. Τρέξαμε κάθε βήμα στην εικόνα μας· οι αριθμοί προέρχονται από έναν server Micro (2 vCPU, 2 GB).
Χρειάζεστε χρήστη με sudo. Ο οδηγός ρύθμισης Ubuntu δημιουργεί έναν.
1. Εγκατάσταση
sudo apt update
sudo apt install -y redis-server
redis-server --version
redis-cli ping
Η εγκατάσταση κράτησε 13 δευτερόλεπτα και μας έδωσε Redis 7.0.15. Ξεκινά αμέσως και σε κάθε εκκίνηση, απαντά PONG και ακούει μόνο στον ίδιο τον server: 127.0.0.1:6379 και [::1]:6379, με protected-mode yes. Χωρίς δεδομένα χρησιμοποιούσε 13,5 MB RAM.
Το αρχείο καταγραφής είχε ήδη μια προειδοποίηση:
WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition.
Το Redis σώζει στον δίσκο από ένα αντίγραφο του εαυτού του που δημιουργεί με fork, και με την προεπιλεγμένη ρύθμιση του πυρήνα αυτό το fork μπορεί να αποτύχει όταν η μνήμη είναι λίγη. Διορθώστε το μία φορά:
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
Μετά την επανεκκίνηση η προειδοποίηση εξαφανίστηκε.
2. Περιορίστε τη μνήμη του
Από το εργοστάσιο το maxmemory είναι 0, δηλαδή χωρίς όριο, και η πολιτική είναι noeviction. Το Redis θα παίρνει RAM μέχρι να τελειώσει στον server. Βάλτε ταβάνι και αποφασίστε τι γίνεται όταν το φτάσει:
redis-cli CONFIG SET maxmemory 256mb
redis-cli CONFIG SET maxmemory-policy allkeys-lru
redis-cli CONFIG REWRITE
Δοκιμάσαμε και τις δύο πολιτικές με όριο 64 MB και 400.000 εγγραφές:
noeviction(προεπιλογή): η μνήμη σταμάτησε στα 63 MB και οι νέες εγγραφές απέτυχαν μεOOM command not allowed when used memory > 'maxmemory'. Σωστή επιλογή για ουρά ή ό,τι δεν αντέχετε να χάσετε.allkeys-lru: το Redis πέταξε τα κλειδιά που είχαν χρησιμοποιηθεί πιο παλιά, 48.606 συνολικά, και όλες οι εγγραφές πέρασαν. Σωστή επιλογή για cache.
Το CONFIG REWRITE αποθηκεύει τις τρέχουσες ρυθμίσεις στο /etc/redis/redis.conf, ώστε να επιβιώνουν σε επανεκκίνηση. Προσθέτει επίσης μια γραμμή που πρέπει να ξέρετε πριν από το βήμα 4.
3. Επιλέξτε πώς σώζει στον δίσκο
Από προεπιλογή, το Redis γράφει στιγμιότυπο (/var/lib/redis/dump.rdb) μετά από 1 αλλαγή σε μία ώρα, 100 σε πέντε λεπτά ή 10.000 σε ένα λεπτό. Δοκιμάσαμε τρεις τρόπους να το σταματήσουμε:
| Πώς σταμάτησε το Redis | Μόνο στιγμιότυπα (προεπιλογή) | Με το αρχείο AOF |
|---|---|---|
systemctl restart | Τίποτα δεν χάθηκε: σώζει στο κλείσιμο | Τίποτα δεν χάθηκε |
Σκοτώθηκε με kill -9 | Το κλειδί μετά το τελευταίο στιγμιότυπο είχε χαθεί | Ένα κλειδί γραμμένο 2 δευτερόλεπτα πριν ήταν εκεί |
Και στις δύο περιπτώσεις το systemd ξεκίνησε ξανά το Redis μόνο του μέσα σε δευτερόλεπτα.
Αν το Redis κρατά δεδομένα που θα σας έλειπαν, ενεργοποιήστε το αρχείο AOF (append-only file). Καταγράφει κάθε εγγραφή και τη γράφει στον δίσκο μία φορά το δευτερόλεπτο. Κάντε το στον server που τρέχει, όχι επεξεργαζόμενοι το αρχείο:
redis-cli CONFIG SET appendonly yes
redis-cli CONFIG REWRITE
redis-cli INFO persistence | grep aof_
Πρώτα δοκιμάσαμε τον άλλο δρόμο, και μας κόστισε τα δεδομένα μας. Αλλάξαμε το appendonly no σε appendonly yes στο redis.conf και κάναμε επανεκκίνηση. Το Redis σηκώθηκε με κενό AOF και δεν φόρτωσε τίποτα από το στιγμιότυπο, οπότε όλα τα υπάρχοντα κλειδιά χάθηκαν. Στο επόμενο κλείσιμο έγραψε το νέο του περιεχόμενο, χωρίς τα παλιά κλειδιά, και πάνω στο dump.rdb. Το CONFIG SET το αποφεύγει: το Redis γράφει πρώτα το AOF από τα δεδομένα στη μνήμη. Μετά από επανεκκίνηση, όλα τα κλειδιά μας ήταν εκεί.
Αν το Redis είναι καθαρή cache που μπορεί να ξεκινήσει άδεια, κάντε το αντίθετο και κλείστε το σώσιμο με redis-cli CONFIG SET save "".
4. Ορίστε κωδικό
Εδώ είναι η δεύτερη παγίδα. Μετά από οποιοδήποτε CONFIG REWRITE, το Redis 7 προσθέτει αυτή τη γραμμή στο τέλος του redis.conf:
user default on nopass ~* &* +@all
Σημαίνει «ο προεπιλεγμένος χρήστης δεν χρειάζεται κωδικό». Έπειτα προσθέσαμε requirepass πιο πάνω στο αρχείο και κάναμε επανεκκίνηση. Το Redis εξακολουθούσε να απαντά PONG χωρίς κωδικό, επειδή η γραμμή user υπερισχύει. Ορίστε τον κωδικό μέσα από το Redis:
REDIS_PASS=$(openssl rand -hex 24)
echo "$REDIS_PASS"
redis-cli CONFIG SET requirepass "$REDIS_PASS"
REDISCLI_AUTH="$REDIS_PASS" redis-cli CONFIG REWRITE
Φυλάξτε τον κωδικό σε ασφαλές σημείο. Το Redis τον αποθηκεύει πλέον ως hash SHA-256 στην ίδια γραμμή user default. Μετά από επανεκκίνηση, το redis-cli ping απάντησε NOAUTH Authentication required. και δούλευε μόνο ο κωδικός. Δώστε τον στο redis-cli μέσω της μεταβλητής REDISCLI_AUTH. Με το -a φαίνεται στη λίστα διεργασιών, και το redis-cli σας προειδοποιεί. Στην εφαρμογή σας βάλτε τον στη διεύθυνση του Redis: redis://:PASSWORD@127.0.0.1:6379/0.
5. Πρόσβαση από τον υπολογιστή σας
Αφήστε το Redis στο 127.0.0.1 και χρησιμοποιήστε SSH tunnel. Βάλτε τη θύρα SSH του server σας, που στα πακέτα NAT είναι η προσωπική σας θύρα:
ssh -N -L 6380:127.0.0.1:6379 deploy@YOUR_SERVER_IP -p 22
Όσο τρέχει αυτό, το redis-cli -p 6380 και τα εργαλεία του υπολογιστή σας μιλούν με το Redis του server. Τίποτα καινούργιο δεν ανοίγει στο internet. Με τον οδηγό για κλειδιά SSH, το tunnel συνδέεται χωρίς κωδικό.
Πόσο γρήγορο είναι
Στον δοκιμαστικό server Micro, το redis-benchmark με 50 clients έδωσε:
| Δοκιμή | Αιτήματα ανά δευτερόλεπτο | Διάμεση καθυστέρηση |
|---|---|---|
| SET | 30.303 | 1,0 ms |
| GET | 35.149 | 0,9 ms |
| SET, 16 εντολές ανά μετάβαση-επιστροφή | 272.109 | 2,4 ms |
| GET, 16 εντολές ανά μετάβαση-επιστροφή | 414.938 | 1,3 ms |
Για την cache ή την ουρά εργασιών μιας web εφαρμογής, είναι πολύ περισσότερα απ' όσα θα χρειαστείτε. Η επιπλέον ταχύτητα έρχεται από την αποστολή εντολών σε δέσμες (pipelining).
Ποιο πακέτο
Το Redis χρειάζεται RAM για τα δεδομένα σας και λίγα ακόμη. Το Nano (2 vCPU, 1 GB, $3/μήνα) τρέχει Redis δίπλα σε μια μικρή εφαρμογή με maxmemory 256mb. Το Micro (2 GB, $5/μήνα) αφήνει χώρο για μεγαλύτερη cache και την εφαρμογή. Αν κάτι άλλο πρέπει να συνδεθεί απευθείας στο Redis, πάρτε δική σας IPv4 (από το Nano-IP με $8/μήνα) και επιτρέψτε στο firewall μόνο εκείνη τη διεύθυνση. Όλα τα πακέτα είναι στη σελίδα VPS, και η πληρωμή γίνεται σε USDT, USDC ή ETH στα δίκτυα Base, Ethereum ή Polygon.
Σχόλια
Δεν υπάρχουν ακόμη σχόλια. Γίνετε ο πρώτος.