EQVPS

VPS पर Redis कैसे इंस्टॉल करें: मेमोरी सीमा, डिस्क पर सेव और ऐसा पासवर्ड जो बना रहे

Ubuntu 24.04 पर Redis इंस्टॉल करें, उसकी मेमोरी सीमित करें ताकि वह पूरा सर्वर न घेर ले, डेटा मिटाए बिना AOF फ़ाइल चालू करें और ऐसा पासवर्ड लगाएँ जो रीस्टार्ट के बाद भी रहे। इनमें से दो चरणों में ऐसे जाल हैं जिनमें हम खुद अपने टेस्ट सर्वर पर फँसे।

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 सीमा और 4,00,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 एक घंटे में 1, पाँच मिनट में 100 या एक मिनट में 10,000 बदलावों के बाद स्नैपशॉट (/var/lib/redis/dump.rdb) लिखता है। हमने इसे रोकने के तीन तरीके आज़माए:

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 इसे उसी user default लाइन में SHA-256 हैश के रूप में रखता है। रीस्टार्ट के बाद 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 टेस्ट सर्वर पर 50 क्लाइंट के साथ redis-benchmark के नतीजे:

टेस्टप्रति सेकंड अनुरोधमीडियन देरी
SET30,3031.0 ms
GET35,1490.9 ms
SET, हर राउंड ट्रिप में 16 कमांड2,72,1092.4 ms
GET, हर राउंड ट्रिप में 16 कमांड4,14,9381.3 ms

किसी वेब ऐप के कैश या जॉब क्यू के लिए यह ज़रूरत से कहीं ज़्यादा है। अतिरिक्त रफ़्तार कमांड को बैच में भेजने (pipelining) से आती है।

कौन-सा प्लान

Redis को आपके डेटा के लिए RAM चाहिए और बहुत कम कुछ और। Nano (2 vCPU, 1 GB, $3/माह) maxmemory 256mb के साथ एक छोटे ऐप के बगल में Redis चला लेता है। Micro (2 GB, $5/माह) बड़े कैश और ऐप दोनों के लिए जगह छोड़ता है। अगर किसी और को Redis से सीधे जुड़ना है, तो अपना IPv4 लें (Nano-IP से, $8/माह) और फ़ायरवॉल में सिर्फ़ वही पता अनुमति दें। सारे प्लान VPS पेज पर हैं, और भुगतान Base, Ethereum या Polygon नेटवर्क पर USDT, USDC या ETH में होता है।

सामान्य प्रश्न

Redis को कितनी RAM चाहिए?

Redis खुद बहुत छोटा है: हमारे सर्वर पर इंस्टॉल होते ही 13.5 MB। उसे आपके डेटा के लिए जगह चाहिए, क्योंकि डेटा मेमोरी में रहता है। maxmemory उतना रखें जितना सर्वर दे सके, जैसे 1 GB वाले सर्वर पर 256 MB, और चुनें कि भर जाने पर क्या हो।

Redis या Valkey?

Valkey, Redis का फ़ोर्क है जो Redis 7.2 से अलग हुआ और वही प्रोटोकॉल बोलता है, इसलिए ज़्यादातर क्लाइंट दोनों के साथ चलते हैं। Ubuntu 24.04 में सिर्फ़ Redis 7.0.15 है। Debian 13 में Redis 8.0 और Valkey 8.1 दोनों हैं, और Debian 12 को Valkey 8.0 backports से मिलता है। इस गाइड के चरण दोनों पर लागू होते हैं।

क्रैश के बाद Redis डेटा क्यों खो देता है?

डिफ़ॉल्ट रूप से Redis, बदली गई की की संख्या के हिसाब से, हर कुछ मिनट में डिस्क पर स्नैपशॉट सेव करता है। जब हमने प्रोसेस को मार दिया, तो आख़िरी स्नैपशॉट के बाद लिखी गई की गायब थी। AOF फ़ाइल चालू करें, जो हर सेकंड लिखती है, फिर क्रैश में ज़्यादा से ज़्यादा करीब एक सेकंड की राइट्स जाएँगी।

मैंने redis.conf में requirepass जोड़ा, फिर भी Redis बिना पासवर्ड कमांड क्यों ले रहा है?

शायद इसलिए कि कभी CONFIG REWRITE चलाया गया था। Redis 7 में यह redis.conf के आख़िर में user default on nopass ~* &* +@all लाइन जोड़ देता है, और यह लाइन ऊपर लिखे requirepass को बेअसर कर देती है। पासवर्ड CONFIG SET requirepass से लगाएँ, फिर CONFIG REWRITE चलाएँ, तो Redis उसे उसी लाइन में सेव कर देगा।

क्या मैं पोर्ट 6379 इंटरनेट पर खोल सकता हूँ?

मत खोलिए। खुले Redis पोर्ट लगातार स्कैन होते हैं और सर्वर में घुसने का आम रास्ता हैं। अपने कंप्यूटर से Redis तक SSH टनल से पहुँचें, या उसे उसी सर्वर पर रखें जहाँ उसे इस्तेमाल करने वाला ऐप है।

टिप्पणियाँ

अभी तक कोई टिप्पणी नहीं। पहले बनें।

एक टिप्पणी छोड़ें

टिप्पणियाँ दिखने से पहले मॉडरेट की जाती हैं।