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-এর ফল:
| পরীক্ষা | প্রতি সেকেন্ডে অনুরোধ | মধ্যম বিলম্ব |
|---|---|---|
| SET | 30,303 | 1.0 ms |
| GET | 35,149 | 0.9 ms |
| SET, প্রতি রাউন্ড ট্রিপে 16টি কমান্ড | 2,72,109 | 2.4 ms |
| GET, প্রতি রাউন্ড ট্রিপে 16টি কমান্ড | 4,14,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-এ।
মন্তব্য
এখনো কোনো মন্তব্য নেই। প্রথম হোন।