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 ایک گھنٹے میں 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 کے نتائج:
| ٹیسٹ | فی سیکنڈ درخواستیں | درمیانی تاخیر |
|---|---|---|
| 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 ماہانہ) maxmemory 256mb کے ساتھ ایک چھوٹی ایپ کے ساتھ Redis چلا لیتا ہے۔ Micro (2 GB، $5 ماہانہ) بڑے کیش اور ایپ دونوں کے لیے جگہ چھوڑتا ہے۔ اگر کسی اور کو Redis سے براہِ راست جڑنا ہے تو اپنا IPv4 لیں (Nano-IP سے، $8 ماہانہ) اور فائر وال میں صرف وہی پتا اجازت دیں۔ تمام پلانز VPS صفحے پر ہیں، اور ادائیگی Base، Ethereum یا Polygon نیٹ ورکس پر USDT، USDC یا ETH میں ہوتی ہے۔
تبصرے
ابھی کوئی تبصرہ نہیں۔ پہلے بنیں۔