الخطوات الاولي
كتابة Main.go
اثناء كتابه المشروع مش هنستخدم اي مكتبات خارجية و ده لان كل اللي احنا محتاجينه متوفر في Go نفسها. ف كل اللي انت محتاجه انك تبدا مشروع Go جديد و تجهز الـ Main.go
package main
import (
"fmt"
)
func main() {
fmt.Println("Hello World")
}
تجهيز الـ Client
الـ InMemory Database اللي احنا هنكتبها هنقول عليها دايما Server
و ده لانها Database Server زي MySQL او Redis Server.
وبما ان الـServer دايما بيحتاج Client
يكلمه ف احنا كمان هنحتاج client علشان نجرب الكود اللي هنكتبه ده و نشوف شغال ازاي.
ف اسهل حاجه هنجربها هي Redis Client وده لانه سهل الاستخدام و كمان علشان ال Server اللي هنكتبه هيبقي متوافق مع Redis.
و متوافق هنا مقصود بيها ان اي client بيعرف يكلم Redis ف هو هيعرف يكلم السيرفر بتاعنا.
تقدر تسطب Redis و الـ Client بتاعه من الموقع الرسمي لـ Redis هنا
وبعدها علي طول جرب
$ redis-cli ping
PONG
واخر خطوه محتاج تعملها بعد كدا انك تقفل Redis Server لان الكود بتاعنا والسيرفر بتاعنا هيستخدم نفس الـ Port.
- لو انت علي ماك
$ brew services stop redis
- لو انت علي لينكس
$ sudo systemctl stop redis
ازاي Redis بيشتغل
خلينا الاول نشرح امثله لـRedis بيشتغل ازاي. مثلا الـ Strings بتسجل بيه key, value.
الـKey هيبقي string والـvalue هتبقي serialized object من اي type زي array, integer, boolean
SET admin ahmed
> GET admin
"ahmed"
الطريقة اللي Redis بيستقبل بيها الاوامر دي عن طريق Serialization Protocol اسمه RESP (Redis serialization protocol).
ف لو بصينا ازاي SET admin ahmed
بيتم ارسالها كـ serialized message لـRedis هتبقي بالشكل ده
*3\r\n$3\r\nset\r\n$5\r\nadmin\r\n$5\r\nahmed
وعلشان نبسط شكلها اكتر
*3
$3
set
$5
admin
$5
ahmed
لو بصيت علي الـRESP هتلاقيه بيقولنا كل علامه من دول ايه معناها
- ’*’ بتقول ان عندنا array حجمها 3.. بالتالي احنا هنقرا 6 سطور. كل سطرين بيمثلو نوع الobject و حجمه و السطر التاني قيمه الاوبجكت ده
- ’$’ بتقول انه string عدد حروفه 5. اذن السطر اللي بعده هيبقي فيه 5 حروف فقط
بردو لما بنقول GET admin
بيرجع نفس شكل الـObject مع اختلاف القيم
$5\r\nahmed\r\n
$5
ahmed
ف اللي احنا هنعمله اننا هنبني نفس الـserializer ومن خلاله هنقدر نكلم الـ Server بتاعنا باي Redis Client علشان نبعتله commands زي Redis بالظبط.
وبكدا يبقي احنا جاهزين نبدا بناء الـ Database بتاعنا.