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 የሙከራ ሰርቨር ላይ 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) በ maxmemory 256mb Redisን ከትንሽ መተግበሪያ ጎን ያሄዳል። Micro (2 GB፣ በወር $5) ለትልቅ ካሽ እና ለመተግበሪያው ቦታ ይተዋል። ሌላ ነገር በቀጥታ ከ Redis ጋር መገናኘት ካለበት የራስዎን IPv4 ይውሰዱ (ከ Nano-IP በወር $8 ጀምሮ) እና በ ፋየርዎል ውስጥ ያንን አድራሻ ብቻ ይፍቀዱ። ሁሉም ፕላኖች በ VPS ገጽ ላይ ናቸው፣ ክፍያውም በ Base፣ Ethereum ወይም Polygon አውታረ መረቦች ላይ በ USDT፣ USDC ወይም ETH ነው።
አስተያየቶች
እስካሁን አስተያየቶች የሉም። መጀመሪያ ይሁኑ።