Syntax | سینتکس
3.02K subscribers
410 photos
108 videos
35 files
378 links
Download Telegram
دوره آموزش پیشرفته ردیس

لینک پلی لیست:
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 تنظیمات ردیس رو میتونید مشخص کنید.

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👍31👎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
7👍2