دوره آموزش پیشرفته ردیس
لینک پلی لیست:
https://www.youtube.com/playlist?list=PLUKW34GJxYOYyPqmZK6ilgosi2VUglOT5
#Redis
@Syntax_fa
لینک پلی لیست:
https://www.youtube.com/playlist?list=PLUKW34GJxYOYyPqmZK6ilgosi2VUglOT5
#Redis
@Syntax_fa
👍7👎1
تو چند دقیقه نحوه کار با Redis Pub/Sub رو تو پایتون یاد بگیر
Pub/Sub
(انتشار/اشتراک) یک الگوی معماری است که به برنامهها اجازه میدهد تا به صورت غیرمستقیم با یکدیگر ارتباط برقرار کنند. در این الگو، تولیدکنندگان اطلاعات (Publisher) پیامها را منتشر میکنند و مصرفکنندگان (Subscriber) به موضوعات (Topics) خاصی که به آنها علاقهمند هستند، اشتراک میگذارند. این سیستم اجازه میدهد تا بدون نیاز به وابستگی مستقیم با یکدیگر، اطلاعات را تبادل کنند.
مزایای Pub/Sub
- کاهش وابستگیها: تولیدکنندگان و مصرفکنندگان نیازی به شناخت یکدیگر ندارند.
- مقیاسپذیری: میتوان به سادگی مصرفکنندگان و تولیدکنندگان جدیدی اضافه کرد.
- توزیعپذیری: میتوان سیستمها را به صورت توزیعشده پیادهسازی کرد.
مثال ساده با Redis Pub/Sub
در این مثال، از Redis به عنوان سیستم Pub/Sub استفاده خواهیم کرد. ابتدا باید Redis را نصب و راهاندازی کنید.
نصب Redis
تو ریپازیتوری ای که لینکشو آخر پست میذارم، سرویس ردیس رو توی docker-compose.yml مشخص کردم و روی داکر اجراش میکنیم.
همچنین داخل فایل .env تنظیمات ردیس رو میتونید مشخص کنید.
پیادهسازی در پایتون
برای این کار به کتابخانه
در این مثال، یک Publisher و یک Subscriber خواهیم داشت.
Publisher (server.py):
در قدم اول کانکشن با ردیس رو می سازیم.
با متد ping میتونیم چک کنیم وضعیت کانگشنمون اوکی هست یا نه(جنبه آموزشی نوشتمش)
بعد مشخص کردیم که topic ما اسمش چیه.
دیتایی که قراره داخل payload مسیج قرار بدیم رو مشخص کردیم که بصورت دیکشنری هستش و بعدش اومدیم به json تبدیلش کردیم و مسیح رو پابلیش کردیم.
Subscriber (client.py):
در قدم اول یک کانکشن ردیس گرفتیم. بعد تاپیکی که subscribe میکنیمش رو مشخص کردیم(میتونیم چندین تا تاپیک رو سابسکرایب کنیم)
در قدم بعدی داخل یک long running میایم به مسیج های جدیدی که میاد گوش میدیم و یک switch case زدیم و براساس تاپیک ها میتونیم کارهای خاص خودش رو انجام بدیم.
نحوه اجرا
1. در یک ترمینال،
2. در یک ترمینال دیگه server.py رو اجرا کنید که با هربار اجرا یک مسیج رو پابلیش میکنه.
سورس کد:
https://github.com/alireza-fa/redis-pub-sub-example
#redis_pub_sub #pub_sub #event_driven #python
@Syntax_fa
Pub/Sub
(انتشار/اشتراک) یک الگوی معماری است که به برنامهها اجازه میدهد تا به صورت غیرمستقیم با یکدیگر ارتباط برقرار کنند. در این الگو، تولیدکنندگان اطلاعات (Publisher) پیامها را منتشر میکنند و مصرفکنندگان (Subscriber) به موضوعات (Topics) خاصی که به آنها علاقهمند هستند، اشتراک میگذارند. این سیستم اجازه میدهد تا بدون نیاز به وابستگی مستقیم با یکدیگر، اطلاعات را تبادل کنند.
مزایای Pub/Sub
- کاهش وابستگیها: تولیدکنندگان و مصرفکنندگان نیازی به شناخت یکدیگر ندارند.
- مقیاسپذیری: میتوان به سادگی مصرفکنندگان و تولیدکنندگان جدیدی اضافه کرد.
- توزیعپذیری: میتوان سیستمها را به صورت توزیعشده پیادهسازی کرد.
مثال ساده با Redis Pub/Sub
در این مثال، از Redis به عنوان سیستم Pub/Sub استفاده خواهیم کرد. ابتدا باید Redis را نصب و راهاندازی کنید.
نصب Redis
تو ریپازیتوری ای که لینکشو آخر پست میذارم، سرویس ردیس رو توی docker-compose.yml مشخص کردم و روی داکر اجراش میکنیم.
همچنین داخل فایل .env تنظیمات ردیس رو میتونید مشخص کنید.
docker-compose up -d
پیادهسازی در پایتون
برای این کار به کتابخانه
redis
نیاز داریم. میتوانید آن را با pip نصب کنید:pip install redis
در این مثال، یک Publisher و یک Subscriber خواهیم داشت.
Publisher (server.py):
import json
from redis import StrictRedis
server = StrictRedis(host="localhost", port=6399, password="redis_password", db=0)
# redis ping
print(server.ping())
topic = "example_topic"
data = {
"name": "alireza",
"age": 22,
}
server.publish(channel=topic, message=json.dumps(data))
در قدم اول کانکشن با ردیس رو می سازیم.
با متد ping میتونیم چک کنیم وضعیت کانگشنمون اوکی هست یا نه(جنبه آموزشی نوشتمش)
بعد مشخص کردیم که topic ما اسمش چیه.
دیتایی که قراره داخل payload مسیج قرار بدیم رو مشخص کردیم که بصورت دیکشنری هستش و بعدش اومدیم به json تبدیلش کردیم و مسیح رو پابلیش کردیم.
Subscriber (client.py):
import json
from redis import StrictRedis
client = StrictRedis(host="localhost", port=6399, password="redis_password", db=0)
topic = "example_topic"
pubsub = client.pubsub()
pubsub.subscribe(topic)
print("waiting for message...")
while True:
for message in pubsub.listen():
if message["data"] == 1:
continue
match message["type"]:
case topic:
# TODO - change serialization. json is not good
data = json.loads(message["data"])
print("received message", data["name"], data["age"])
در قدم اول یک کانکشن ردیس گرفتیم. بعد تاپیکی که subscribe میکنیمش رو مشخص کردیم(میتونیم چندین تا تاپیک رو سابسکرایب کنیم)
در قدم بعدی داخل یک long running میایم به مسیج های جدیدی که میاد گوش میدیم و یک switch case زدیم و براساس تاپیک ها میتونیم کارهای خاص خودش رو انجام بدیم.
نحوه اجرا
1. در یک ترمینال،
client.py
را اجرا کنید2. در یک ترمینال دیگه server.py رو اجرا کنید که با هربار اجرا یک مسیج رو پابلیش میکنه.
سورس کد:
https://github.com/alireza-fa/redis-pub-sub-example
#redis_pub_sub #pub_sub #event_driven #python
@Syntax_fa
🔥6💋4👍3❤1👎1🙏1
معرفی Redis Insight
یه ابزار گرافیکی خوشساخت و راحت برای Redis هست که باهاش میتونی خیلی راحت دیتابیست رو ببینی، مدیریت کنی و حتی از قابلیتهای حرفهای Redis هم استفاده کنی.
چیزایی که Redis Insight برات روون و آسون میکنه:
میتونی دادههات (کلید-مقدار) رو خیلی راحت مرور، فیلتر و حتی به شکلهای مختلف ببینی (مثل JSON، هگز، ASCII و …)
میتونی خیلی راحت روی انواع ساختار داده مثل لیست، هش، استرینگ، ست، ست مرتب و استریم CRUD انجام بدی
جیسان(JSON) هم پشتیبانی میکنه، میتونی مستقیم با دادههای ساختاریافته کار کنی
آموزشهای تعاملی داره که نشون میده چطور از JSON استفاده کنی، جستجوهای قوی انجام بدی و حتی برای پروژههای AI مثل سرچ برداری ازش کمک بگیری
خودش پیشنهادهایی برای بهتر شدن کارایی و مصرف حافظه بهت میده و این پیشنهادها بسته به کاری که میکنی تغییر میکنن
پروفایلر(Profiler) داره که همهی دستوراتی که میفرستی رو لحظهای بررسی میکنه
ا SlowLog هم داره تا ببینی چه چیزایی تو Redis کند اجرا شدن
سیستم Pub/Sub هم پشتیبانی میکنه؛ یعنی میتونی تو کانالها عضو شی و پیام رد و بدل کنی
قابلیت حذف گروهی کلیدها رو هم داره (وقتی با فیلتر دنبال یه سری کلید خاص میگردی)
ا Workbench یه خط فرمان باحال داره با تکمیل خودکار و نمایش گرافیکی دادهها
حتی میتونی نمایش گرافیکی نتایج سرچ و ایندکسها رو ببینی و اگه بخوای، پلاگین خودت رو هم برای نمایش دادهها بسازی
https://github.com/RedisInsight/RedisInsight
#redis
@Syntax_fa
یه ابزار گرافیکی خوشساخت و راحت برای Redis هست که باهاش میتونی خیلی راحت دیتابیست رو ببینی، مدیریت کنی و حتی از قابلیتهای حرفهای Redis هم استفاده کنی.
چیزایی که Redis Insight برات روون و آسون میکنه:
میتونی دادههات (کلید-مقدار) رو خیلی راحت مرور، فیلتر و حتی به شکلهای مختلف ببینی (مثل JSON، هگز، ASCII و …)
میتونی خیلی راحت روی انواع ساختار داده مثل لیست، هش، استرینگ، ست، ست مرتب و استریم CRUD انجام بدی
جیسان(JSON) هم پشتیبانی میکنه، میتونی مستقیم با دادههای ساختاریافته کار کنی
آموزشهای تعاملی داره که نشون میده چطور از JSON استفاده کنی، جستجوهای قوی انجام بدی و حتی برای پروژههای AI مثل سرچ برداری ازش کمک بگیری
خودش پیشنهادهایی برای بهتر شدن کارایی و مصرف حافظه بهت میده و این پیشنهادها بسته به کاری که میکنی تغییر میکنن
پروفایلر(Profiler) داره که همهی دستوراتی که میفرستی رو لحظهای بررسی میکنه
ا SlowLog هم داره تا ببینی چه چیزایی تو Redis کند اجرا شدن
سیستم Pub/Sub هم پشتیبانی میکنه؛ یعنی میتونی تو کانالها عضو شی و پیام رد و بدل کنی
قابلیت حذف گروهی کلیدها رو هم داره (وقتی با فیلتر دنبال یه سری کلید خاص میگردی)
ا Workbench یه خط فرمان باحال داره با تکمیل خودکار و نمایش گرافیکی دادهها
حتی میتونی نمایش گرافیکی نتایج سرچ و ایندکسها رو ببینی و اگه بخوای، پلاگین خودت رو هم برای نمایش دادهها بسازی
https://github.com/RedisInsight/RedisInsight
#redis
@Syntax_fa
❤7👍2