Redis მონაცემებს მეხსიერებაში ინახავს და დაახლოებით მილიწამში პასუხობს, ამიტომ ის ამდენი აპლიკაციის უკან დგას როგორც ქეში, რიგი ან სესიების საცავი. დაყენება ერთი ბრძანებაა. საქმე ნაგულისხმევ პარამეტრებშია: მეხსიერების ლიმიტი არ არის, სნეპშოტებმა შეიძლება ბოლო ჩანაწერები დაკარგოს, და არსებობს ორი მარტივი შეცდომა, რომელიც ჩუმად შლის თქვენს მონაცემებს ან თიშავს პაროლს. ეს სახელმძღვანელო ყველაფერს Ubuntu 24.04-ზე განიხილავს. ყველა ნაბიჯი ჩვენს იმიჯზე გავიარეთ; რიცხვები 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-ით და უსმენს მხოლოდ თავად სერვერს: 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-ს მანამდე დაიკავებს, სანამ სერვერზე არ ამოიწურება. დააწესეთ ზღვარი და გადაწყვიტეთ, რა მოხდეს მისი მიღწევისას:
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, და ყველა ჩანაწერმა გაიარა. შესაფერისია ქეშისთვის.
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). ის ყველა ჩანაწერს აღრიცხავს და დისკზე წამში ერთხელ წერს. გააკეთეთ ეს მომუშავე სერვერზე და არა ფაილის რედაქტირებით:
redis-cli CONFIG SET appendonly yes
redis-cli CONFIG REWRITE
redis-cli INFO persistence | grep aof_
ჯერ სხვა გზა ვცადეთ და მონაცემები დაგვიჯდა. redis.conf-ში appendonly no შევცვალეთ appendonly yes-ით და გადავტვირთეთ. Redis ცარიელი AOF-ით ჩაირთო და სნეპშოტიდან არაფერი ჩატვირთა, ასე რომ ყველა არსებული გასაღები გაქრა. შემდეგ გაჩერებისას მან თავისი ახალი შიგთავსი, ძველი გასაღებების გარეშე, dump.rdb-ზეც გადააწერა. CONFIG SET ამას თავიდან აგვაცილებს: Redis ჯერ AOF-ს მეხსიერებაში არსებული მონაცემებიდან წერს. გადატვირთვის შემდეგ ყველა ჩვენი გასაღები ადგილზე იყო.
თუ Redis სუფთა ქეშია, რომელსაც ცარიელი ჩართვა არ აწუხებს, პირიქით მოიქეცით და შენახვა გამორთეთ: 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 მას 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 გვირაბი. მიუთითეთ თქვენი სერვერის SSH პორტი; NAT პაკეტებზე ეს თქვენი პირადი პორტია:
ssh -N -L 6380:127.0.0.1:6379 deploy@YOUR_SERVER_IP -p 22
სანამ ის მუშაობს, redis-cli -p 6380 და თქვენი კომპიუტერის პროგრამები სერვერის Redis-ს ესაუბრება. ინტერნეტში ახალი არაფერი იხსნება. SSH გასაღებების სახელმძღვანელოთი გვირაბი პაროლის გარეშე შევა.
რამდენად სწრაფია
Micro სატესტო სერვერზე redis-benchmark-მა 50 კლიენტით აჩვენა:
| ტესტი | მოთხოვნა წამში | მედიანური დაყოვნება |
|---|---|---|
| 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 |
ვებაპლიკაციის ქეშისთვის ან ამოცანების რიგისთვის ეს ბევრად მეტია, ვიდრე დაგჭირდებათ. დამატებითი სიჩქარე ბრძანებების ჯგუფებად გაგზავნიდან (pipelining) მოდის.
რომელი პაკეტი
Redis-ს RAM სჭირდება თქვენი მონაცემებისთვის და სხვა თითქმის არაფერი. Nano (2 vCPU, 1 GB, $3/თვე) Redis-ს პატარა აპლიკაციის გვერდით ამუშავებს maxmemory 256mb-ით. Micro (2 GB, $5/თვე) ადგილს უტოვებს უფრო დიდ ქეშს და თავად აპლიკაციას. თუ Redis-თან პირდაპირ რამე სხვა უნდა დაუკავშირდეს, აიღეთ საკუთარი IPv4 (Nano-IP-დან, $8/თვე) და ფაირვოლში მხოლოდ ეს მისამართი დაუშვით. ყველა პაკეტი VPS გვერდზეა, გადახდა კი USDT-ით, USDC-ით ან ETH-ით ხდება Base, Ethereum ან Polygon ქსელებში.
კომენტარები
ჯერ არ არის კომენტარები. იყავით პირველი.