تغییرات اخیر

در اینجا اطلاعیه‌ها، نسخه‌ها و تغییرات جدید لیارا فهرست می‌شوند.

چطور می‌توان با استفاده از Redis سرعت پردازش سشن‌های برنامه Python/MySQL را در اوبونتو 22.04 افزایش داد؟


۱۰ اسفند ۱۴۰۳

آیا تا به حال با کندی عملکرد برنامه‌های وب خود، به‌خصوص در زمان احراز هویت کاربران، مواجه شده‌اید؟ هر بار که کاربری وارد سیستم می‌شود، درخواست به دیتابیس ارسال می‌شود و این می‌تواند به سرعت منجر به کندی و فشار بیش از حد بر روی سرور شود.

اما راه‌حل چیست؟ یکی از بهترین راه‌ها برای حل این مشکل، استفاده از سیستم کشینگ است. در این مطلب از لیارا به شما نشان خواهیم داد تا چگونه بتوانید از Redis به‌عنوان یک کش سریع و کارآمد در کنار MySQL برای بهبود عملکرد احراز هویت کاربران استفاده کنید.

در ادامه با آن‌ها آشنا خواهید شد:

  • احراز هویت چیست؟
  • چالش های احراز هویت
  • پیش‌ نیازها
  • نصب درایورهای پایگاه داده برای Redis و MySQL در پایتون
  • راه‌اندازی یک پایگاه داده نمونه MySQL
  • ایجاد یک ماژول مرکزی MySQL برای پایتون
  • ایجاد ماژول مرکزی Redis برای پایتون
  • ایجاد نقطه ورودی برنامه
  • تست کردن برنامه
  • سوالات متداول
  • جمع بندی

احراز هویت چیست؟

احراز هویت، فرآیندی است که هویت کاربران را در زمان ورود به سیستم تایید می‌کند. در این فرآیند، کاربران نام کاربری و رمز عبور خود را وارد می‌کنند و سپس اپلیکیشن این اطلاعات را با داده‌های ذخیره‌شده در پایگاه داده مقایسه می‌کند. اگر این اطلاعات با هم تطابق داشته باشد، به کاربر دسترسی ورود به سیستم را می‌دهد.

یکی از روش‌های رایج و عملی برای ذخیره اطلاعات ورود، استفاده از پایگاه‌های داده رابطه‌ای مانند MySQL یا PostgreSQL است. اما این روش با چالش‌هایی روبرو است که در ادامه به آن‌ها خواهیم پرداخت.

چالش های احراز هویت

  • بار اضافی بر روی پایگاه داده: هر بار که کاربر درخواست ورود به سیستم را می‌دهد، اپلیکیشن باید به پایگاه داده متصل شود و اطلاعات مربوط به اعتبارسنجی را بررسی کند. این فرآیند موجب افزایش ترافیک و فشار بر روی سرور پایگاه داده شده و همین امر باعث کندی عملکرد نیز می‌شود.
  • مشکلات مقیاس‌پذیری در پایگاه‌های داده دیسک‌محور: زمانی که اپلیکیشن شما تعداد درخواست‌های زیادی را در هر ثانیه دریافت می‌کند، باعث می‌شود پایگاه‌های داده که اطلاعات را روی دیسک ذخیره می‌کنند نتوانند به‌خوبی و سریع پاسخ صحیح را بدهند.

برای حل این مشکلات، می‌توان از Redis برای کش کردن اطلاعات ورود کاربران استفاده کنید. Redis یکی از سریع‌ترین پایگاه‌های داده است که از حافظه RAM کامپیوتر برای ذخیره داده‌ها استفاده می‌کند. به این ترتیب، اپلیکیشن شما نیازی به ارتباط دائمی با پایگاه داده ندارد و سرعت ورود کاربران نیز افزایش می‌یابد.

👈🏻شاید به دنبال این مطلب باشید: Redis چیست؟

احراز هویت

پیش‌ نیازها

  • یک سرور Ubuntu 22.04 را راه‌اندازی کنید.
  • سرور خود را پیکربندی و تنظیم کنید.
  • یک کاربر غیر روت با دسترسی sudo بسازید.
  • به حساب کاربر جدید خود وارد شوید و نرم‌افزارهای زیر را نصب کنید:
    • MySQL Server
    • Redis Server

نصب درایور های پایگاه داده برای Redis و MySQL در پایتون

در این اپلیکیشن، اطلاعات کاربران مانند نام کاربری و کلمه عبور در پایگاه داده MySQL ذخیره می‌شود. زمانی که کاربری وارد می‌شود، یک اسکریپت پایتون از پایگاه داده MySQL اطلاعات را می‌گیرد و آن‌ها را با داده‌های ذخیره‌شده مقایسه می‌کند. پس از اینکه کاربر وارد شد، اسکریپت پایتون اطلاعات ورود او را در Redis کش می‌کند تا در درخواست‌های بعدی سریع‌تر به آن‌ها دسترسی داشته باشد.

برای اینکه اسکریپت‌های پایتون شما بتوانند با پایگاه‌های داده MySQL و Redis ارتباط برقرار کند، باید ماژول‌های خاصی را نصب کنید. این ماژول‌ها در واقع درایورهایی هستند که به پایتون اجازه می‌دهد تا به پایگاه‌های داده متصل شود.

برای نصب این درایورها، مراحل زیر را دنبال کنید:

ابتدا لازم است فهرست بسته‌های سیستم را به‌روز کنید تا به جدیدترین نسخه‌ها دسترسی داشته باشید. برای انجام این کار، دستور زیر را اجرا کنید.

sudo apt install python3-pip

نصب درایور MySQL برای پایتون

pip install mysql-connector-python

نصب درایور Redis برای پایتون

pip install redis

بعد از نصب درایورهای لازم برای ارتباط با MySQL و Redis، به مرحله بعدی را انجام دهید و یک پایگاه داده MySQL راه‌اندازی کنید.

در این مرحله، باید یک پایگاه داده MySQL ایجاد کنید تا اطلاعات ورود کاربران را در آن ذخیره کنید. این پایگاه داده در واقع نقطه‌ای خواهد بود که اطلاعات ورود کاربران مانند نام کاربری و کلمه عبور در آن ذخیره می‌شود تا بعداً از طریق پایتون و Redis به آن دسترسی داشته باشید.

برای شروع، باید مراحل لازم برای راه‌اندازی پایگاه داده MySQL را دنبال کنید و یک پایگاه داده و جدول مناسب ایجاد کنید. این مرحله یکی از مهم‌ترین مراحل است و باید آن را با توجه انجام دهید، زیرا در مراحل بعدی باید اطلاعات کاربران را در این پایگاه داده ذخیره کرده و برای احراز هویت از آن‌ها استفاده کنید.

راه‌ اندازی یک پایگاه داده نمونه MySQL

برای این راهنما، به یک جدول در MySQL نیاز داریم. در محیط‌های تولیدی ممکن است چندین جدول برای درخواست‌های مختلف داشته باشید. برای شروع، یک پایگاه داده بسازید و جدول مورد نظر را ایجاد کنید.

نصب درایور های پایگاه داده برای Redis و MySQL در پایتون

ابتدا وارد سرور MySQL شوید به‌عنوان کاربر روت کد زیر را وارد کنید.

sudo mysql -u root -p

پس از وارد کردن پسورد روت MySQL و فشردن ENTER برای ادامه، دستور زیر را برای ایجاد یک پایگاه داده نمونه به نام company و یک حساب کاربری company_user اجرا کنید. به‌جای example-mysql-password از یک پسورد قوی استفاده کنید.

CREATE DATABASE company;
CREATE USER 'company_user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'example-mysql-password';
GRANT ALL PRIVILEGES ON company.* TO 'company_user'@'localhost';
FLUSH PRIVILEGES;

مطمئن شوید که خروجی زیر را مشاهده می‌کنید تا تأیید کنید که دستورات قبلی با موفقیت اجرا شده‌اند. این خروجی نشان می‌دهد که دستورات با موفقیت اجرا شده‌اند.

Query OK, 1 row affected (0.01 sec)

برای انتقال به پایگاه داده company دستور زیر را وارد کنید. این دستور شما را به پایگاه داده جدید company منتقل می‌کند.

USE company;

برای تأیید اتصال به پایگاه داده جدید، باید خروجی زیر را مشاهده کنید. این خروجی نشان می‌دهد که به‌درستی به پایگاه داده company متصل شده‌اید.

Database changed

برای ایجاد جدول system_users که شامل اطلاعات کاربران باشد، دستور زیر را وارد کنید.

CREATE TABLE system_users (
    user_id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50),
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    password VARCHAR(50)
) ENGINE = InnoDB;

در این جدول، ستون user_id به‌عنوان کلید اصلی، شناسه منحصربه‌فرد هر کاربر را ذخیره می‌کند و ستون‌های username و password برای اطلاعات ورود کاربران استفاده می‌شوند. همچنین ستون‌های first_name و last_name نام‌های کاربران را ذخیره می‌کنند.

برای تأیید ایجاد جدول جدید باید خروجی زیر را مشاهده کنید. این خروجی نشان می‌دهد که جدول system_users با موفقیت ایجاد شده است.

Query OK, 0 rows affected (0.03 sec)
راه‌ اندازی یک پایگاه داده نمونه MySQL

برای پر کردن جدول system_users با داده‌های نمونه و استفاده از تابع داخلی MD5(...) برای هش کردن کلمه عبور؛ به‌منظور امنیت بیشتر از دستور زیر استفاده کنید.

INSERT INTO system_users (username, first_name, last_name, password) VALUES ('john_doe', 'JOHN', 'DOE', MD5('password_1'));
INSERT INTO system_users (username, first_name, last_name, password) VALUES ('mary_henry', 'MARY', 'HENRY', MD5('password_2'));
INSERT INTO system_users (username, first_name, last_name, password) VALUES ('peter_jade', 'PETER', 'JADE', MD5('password_3'));

برای تأیید اینکه داده‌ها با موفقیت وارد جدول شده‌اند، باید خروجی زیر را مشاهده کنید.

Query OK, 1 row affected (0.00 sec)

سپس برای اطمینان از اینکه داده‌ها به درستی وارد جدول شده‌اند، دستور زیر را برای مشاهده محتویات جدول system_users اجرا کنید.

این دستور اطلاعات ذخیره شده در جدول system_users را نمایش می‌دهد.

SELECT
    user_id,
    first_name,
    last_name,
    password
FROM system_users;

برای تأیید اینکه داده‌ها به درستی وارد جدول شده‌اند، باید خروجی زیر را مشاهده کنید.

Output+---------+------------+-----------+----------------------------------+
| user_id | first_name | last_name | password |
+---------+------------+-----------+----------------------------------+
| 1 | JOHN | DOE | 57210b12af5e06ad2e6e54a93b1465aa |
| 2 | MARY | HENRY | 259640f97ac2b4379dd540ff4016654c |
| 3 | PETER | JADE | 48ef85c894a06a4562268de8e4d934e1 |
+---------+------------+-----------+----------------------------------+
3 rows in set (0.00 sec)

برای خروج از پایگاه داده MySQL، دستور زیر را وارد کنید.

QUIT;

حال که پایگاه داده MySQL مناسب برنامه‌تان را راه‌اندازی کرده‌اید، در مرحله بعدی باید یک ماژول پایتون بسازید که با پایگاه داده نمونه شما ارتباط برقرار کند. در این مرحله، شما اسکریپت پایتونی خواهید نوشت که به پایگاه داده متصل شده، داده‌ها را از آن دریافت کرده و یا در آن ذخیره خواهید کرد.

MySQL

🔹بیشتر بخوانید: مقایسه دیتابیس‌های MySQL و MariaDB

ایجاد یک ماژول مرکزی MySQL برای پایتون

در هر پروژه پایتون، برای افزایش قابلیت استفاده مجدد از کد، بهتر است برای هر وظیفه یک ماژول جداگانه ایجاد کنید. در این قسمت باید، یک ماژول مرکزی ایجاد کنید که به شما اجازه دهد تا از طریق یک استکریپت پایتون به پایگاه‌ داده MySQL متصل شده و آن را درخواست کنید.

ایجاد یک دایرکتوری پروژه

ابتدا یک دایرکتوری جدید بسازید. این دایرکتوری کدهای پایتون شما را از سایر فایل‌های سیستم جدا خواهد کرد. برای این عمل دستور زیر را در ترمینال وارد کنید.

    mkdir project

    برای انتقال به دایرکتوری جدید پروژه، دستور زیر را وارد کنید.

    cd project

    برای باز کردن یک فایل جدید به نام mysql_db.py با استفاده از ویرایشگر متن nano، دستور زیر را وارد کنید.

    nano mysql_db.py
    

    این دستور ویرایشگر nano را باز می‌کند و فایل mysql_db.py را ایجاد می‌کند تا ماژول پایتون شما که به پایگاه داده MySQL ارتباط برقرار می‌کند، در آن قرار گیرد.

    برای ایجاد ماژول پایتون که به پایگاه داده MySQL متصل می‌شود، اطلاعات زیر را در فایل mysql_db.py وارد کنید. به جای example-mysql-password پسورد صحیح حساب کاربری company_user را وارد کنید.

    import mysql.connector
    class MysqlDb:
    def db_con(self):
    mysql_con = mysql.connector.connect(
        host     = "localhost",
        user     = "company_user",
        password = "example-mysql-password",
        database = "company",
        port     = "3306"
    )
    
    return mysql_con
    def query(self, username, password):
    db = self.db_con()
    db_cursor = db.cursor()
    
    db_query  = "select username, password from system_users where username = %s and password = md5(%s)"
    db_cursor.execute(db_query, (username, password))
    
    result = db_cursor.fetchone()
    row_count = db_cursor.rowcount
    
    if  row_count < 1:
        return False
    else:
        return result[1]

    فایل mysql_db.py را ذخیره و بسته کنید.

    ماژول مرکزی MySQL

    فایل ماژول mysql_db.py شامل یک کلاس به نام MysqlDb است که دو متد دارد:

    • db_con(self): به پایگاه داده نمونه company که قبلاً ایجاد کرده‌اید متصل می‌شود و یک اتصال MySQL قابل استفاده مجدد را برمی‌گرداند.
    • query(self, username, password): این متد نام کاربری و کلمه عبور را می‌گیرد و جدول system_users را جستجو می‌کند تا بررسی کند آیا کاربری با این اطلاعات وجود دارد. اگر کاربر پیدا نشود، مقدار False را برمی‌گرداند، در غیر این صورت کلمه عبور کاربر (نتیجه‌ی پیدا شده) را برمی‌گرداند.

    با آماده شدن ماژول MySQL، به مرحله بعدی بروید و ماژول مشابهی برای ارتباط با پایگاه داده Redis ایجاد کنید.

    ایجاد ماژول مرکزی Redis برای پایتون

    در این گام، یک ماژول پایتونی می‌سازید که به سرور Redis متصل می‌شود. مراحل زیر را دنبال کنید.

    1. یک فایل جدید به نام redis_db.py باز کنید.
    nano redis_db.py
    
    1. اطلاعات زیر را در فایل redis_db.py وارد کنید. به جای example-redis-password پسورد صحیح سرور Redis را وارد کنید.
    import redis
    
    class RedisDb:
        def db_con(self):
            r_host = 'localhost'
            r_port = 6379
            r_pass = 'example-redis-password'  # پسورد صحیح را وارد کنید
            redis_con = redis.Redis(host=r_host, port=r_port, password=r_pass)
            return redis_con
    

    این کد یک کلاس RedisDb ایجاد می‌کند که یک متد به نام db_con دارد. این متد به سرور Redis متصل می‌شود و اتصال Redis را برمی‌گرداند.

    پس از وارد کردن کد، فایل را ذخیره کنید و از nano خارج شوید. فایل redis_db.py را ذخیره و بسته کنید.

    این فایل شامل یک کلاس به نام RedisDb است که درون آن متد db_con(self) وجود دارد. این متد با استفاده از اطلاعات ورودی که ذخیره کرده است، به سرور Redis متصل می‌شود و یک اتصال Redis قابل استفاده مجدد را برمی‌گرداند.

    ایجاد نقطه ورودی برنامه

    هر برنامه پایتون باید یک نقطه ورود داشته باشد، یعنی فایلی که هنگام اجرای برنامه اجرا می‌شود را در اختیار داشته باشد. در این فایل، کدی نوشته می‌شود که زمان فعلی سرور را به کاربران احراز هویت‌شده نمایش می‌دهد. همچنین، از ماژول‌های MySQL و Redis که قبلاً ایجاد کرده‌اید، برای احراز هویت کاربران استفاده می‌شود.

    1. یک فایل جدید به نام index.py باز کنید.
    nano index.py
    
    1. اطلاعات زیر را در فایل index.py وارد کنید.
    # کد مورد نظر شما
    

    این کد به طور خلاصه نقطه ورودی اصلی برنامه شما را تعریف می‌کند که در آن از ماژول‌های MySQL و Redis برای احراز هویت کاربران و سپس نمایش زمان سرور استفاده می‌شود.

    from encodings import utf_8
    import base64
    from hashlib import md5
    import json
    import datetime
    import http.server
    from http import HTTPStatus
    import socketserver
    import mysql_db
    import redis_db
    class HttpHandler(http.server.SimpleHTTPRequestHandler):
    def do_GET(self):
    self.send_response(HTTPStatus.OK)
    self.send_header('Content-type', 'application/json')
    self.end_headers()
    authHeader = self.headers.get('Authorization').split(' ');
    auth_user, auth_password = base64.b64decode(authHeader[1]).decode('utf8').split(':')
    mysql_server = mysql_db.MysqlDb()
    redis_server = redis_db.RedisDb()
    redis_client = redis_server.db_con()
    now = datetime.datetime.now()
    current_time = now.strftime("%Y-%m-%d %H:%M:%S")
    resp = {}
    if redis_client.exists(auth_user):
    if md5(auth_password.encode('utf8')).hexdigest() != redis_client.get(auth_user).decode('utf8'):
    resp = {"error": "Invalid username/password."}
    else:
    resp = {"time": current_time, "authorized by": "Redis server"}
    else:
    mysql_resp = mysql_server.query(auth_user, auth_password)
    if mysql_resp == False:
    resp = {"error": "Invalid username/password."}
    else:
    resp = {"time": current_time, "authorized by": "MySQL server"}
    redis_client.set(auth_user, mysql_resp)
    self.wfile.write(bytes(json.dumps(resp, indent = 2) + "\r\n", "utf8"))
    httpd = socketserver.TCPServer(('', 8080), HttpHandler)
    print("Web server is running on port 8080…")
    try:
    httpd.serve_forever()
    except KeyboardInterrupt:
    httpd.server_close()
    print("Web server has stopped runing.")

    فایل index.py را ذخیره و بسته کنید.

    ایجاد ماژول مرکزی Redis برای پایتون

    در فایل index.py بخش import ماژول‌های زیر را به پروژه شما اضافه می‌کند.

    • ماژول‌های utf_8 ,base64 ,md5 و json برای کدگذاری و فرمت‌بندی متن.
    • ماژول‌های http.server ,HTTPStatus و socketserver برای راه‌اندازی سرور وب.
    • ماژول datetime و time برای کار با تاریخ و زمان.
    • ماژول‌های سفارشی mysql_db ,redis_db که قبلاً ایجاد کرده‌اید برای دسترسی به سرورهای MySQL و Redis.

    کلاس HttpHandler(http.server.SimpleHTTPRequestHandler) یک هندلر برای سرور HTTP است. در این کلاس، متد do_GET(self) درخواست‌های HTTP GET را سرو می‌کند و تاریخ و زمان سیستم را برای کاربران احراز هویت‌شده نمایش می‌دهد.

    در منطق if ... : else: ... اسکریپت پایتون ابتدا بررسی می‌کند که آیا اطلاعات کاربر در سرور Redis وجود دارد یا خیر. اگر اطلاعات کاربر موجود باشد و پسورد ذخیره‌شده در Redis با پسورد وارد شده مطابقت نداشته باشد، خطای {"error": "Invalid username/password."} را برمی‌گرداند.

    اگر اطلاعات کاربر در Redis وجود نداشته باشد، برنامه از سرور MySQL برای احراز هویت استفاده می‌کند. اگر پسورد وارد شده با مقدار ذخیره‌شده در دیتابیس مطابقت نداشته باشد، همین خطای {"error": "Invalid username/password."} نمایش داده می‌شود. در غیر این صورت، جزئیات کاربر در Redis ذخیره می‌شود.

    در نهایت، اگر اطلاعات کاربر با جزئیات Redis/MySQL مطابقت داشته باشد، تاریخ و زمان جاری سیستم به شکل {"time": current_time, ...} نمایش داده می‌شود. فیلد authorized by در خروجی نشان می‌دهد که کدام دیتابیس سرور کاربران را احراز هویت کرده است.

    if redis_client.exists(auth_user):
    if md5(auth_password.encode('utf8')).hexdigest() != redis_client.get(auth_user).decode('utf8'):
    resp = {"error": "Invalid username/password."}
    else:
    resp = {"time": current_time, "authorized by": "Redis server"}
    else:
    mysql_resp = mysql_server.query(auth_user, auth_password)
    if mysql_resp == False:
    resp = {"error": "Invalid username/password."}
    else:
    resp = {"time": current_time, "authorized by": "MySQL server"}
    redis_client.set(auth_user, mysql_resp)

    تست کردن برنامه

    در این مرحله، برنامه خود را اجرا می‌کنید تا ببینید آیا مکانیزم کشینگ Redis به درستی کار می‌کند یا خیر. برای تست برنامه، از دستور زیر برای اجرای برنامه استفاده کنید.

    این دستور برنامه را اجرا می‌کند و شما می‌توانید عملکرد کشینگ Redis و احراز هویت کاربران را تست کنید.

    python3 index.py
    

    مطمئن شوید که سرور وب سفارشی برنامه به درستی اجرا می‌شود.

    باید خروجی زیر را مشاهده کنید.

    Web server is running on port 8080...
    

    سپس یک اتصال SSH جدید به سرور خود باز کنید و از دستورات curl زیر برای ارسال چهار درخواست GET با استفاده از اطلاعات کاربری john_doe استفاده کنید. به انتهای URL http://localhost:8080/ عددهای [1-4] را اضافه کنید تا چهار درخواست را در یک دستور ارسال کنید.

    curl -X GET -u john_doe:password_1 http://localhost:8080/[1-4]
    

    خروجی‌های زیر را بررسی کنید: سرور MySQL تنها درخواست اول احراز هویت را پردازش می‌کند، در حالی که دیتابیس Redis سه درخواست بعدی را پاسخ می‌دهد.

    [1/4]
    {
      "time": "2023-11-07 10:04:38",
      "authorized by": "MySQL server"
    }
    [4/4]
    {
      "time": "2023-11-07 10:04:38",
      "authorized by": "Redis server"
    }
    

    اکنون منطق برنامه شما به درستی کار می‌کند.

    📌شاید این آموزش برای شما مفید باشد: توسعه یک برنامه انتقال فایل بسیار ساده با Python

    تست کردن برنامه

    سوالات متداول

    در ادامه به سوالات متداولی خواهیم پرداخت تا بتوانیم به فهم بهتر شما کمک کرده باشیم.

    چگونه Redis و MySQL را نصب کنم؟

    برای نصب Redis و MySQL، ابتدا باید از دستورات زیر استفاده کنید.

    • برای Redis: sudo apt install redis-server
    • برای MySQL: sudo apt install mysql-server

    پس از نصب، برای راه‌اندازی Redis و MySQL از دستورات زیر استفاده کنید.

    • sudo systemctl start redis
    • sudo systemctl start mysql

    چرا از Redis برای کشینگ استفاده می‌کنیم؟

    Redis یک پایگاه داده سریع در حافظه است که برای ذخیره داده‌های موقتی و کشینگ اطلاعات مانند داده‌های احراز هویت بسیار مناسب است. این کار سرعت دسترسی به داده‌ها را افزایش می‌دهد و فشار بر روی دیتابیس اصلی (مثل MySQL) کاهش می‌دهد.

    چرا پسوردها را در MySQL با MD5 هش می‌کنیم؟

    هش کردن پسوردها با MD5 برای امنیت بیشتر است. در واقع، این کار باعث می‌شود که حتی در صورت دسترسی به دیتابیس، پسوردها به صورت متن ساده در دسترس نباشند.

    چگونه می‌توانم از Redis برای ذخیره اطلاعات کاربران استفاده کنم؟

    برای ذخیره اطلاعات کاربران در Redis، پس از احراز هویت کاربر در MySQL، اطلاعات کاربر را در Redis با دستور redis_client.set(auth_user, mysql_resp) ذخیره می‌کنید. در درخواست‌های بعدی، ابتدا Redis را بررسی می‌کنید و در صورت وجود اطلاعات، از آن استفاده می‌کنید.

    چرا Redis اطلاعات کاربر را برای سه درخواست بعدی نگه می‌دارد؟

    پس از اولین درخواست احراز هویت که از MySQL استفاده می‌شود، اطلاعات کاربر در Redis ذخیره می‌شود. برای درخواست‌های بعدی، Redis سریع‌تر از MySQL عمل می‌کند و اطلاعات را بدون نیاز به جستجو در دیتابیس MySQL به شما می‌دهد.

    چگونه می‌توانم از curl برای تست API خود استفاده کنم؟

    برای تست API خود از دستور زیر استفاده کنید.

    curl -X GET -u username:password http://localhost:8080/
    

    این دستور یک درخواست GET به سرور شما ارسال می‌کند و در صورتی که احراز هویت موفق باشد، زمان و سرور احراز هویت‌شده را نمایش می‌دهد.

    چه مشکلاتی ممکن است در کشینگ Redis رخ دهد؟

    ممکن است Redis به دلایلی مانند پر شدن حافظه یا قطع اتصال از دسترس خارج شود. بنابراین، باید مکانیسم‌های بازیابی و مدیریت خطا برای این شرایط پیاده‌سازی کنید.

    چرا پس از ذخیره اطلاعات کاربر در Redis، سرور MySQL فقط اولین درخواست را سرو می‌کند؟

    این به این دلیل است که اولین بار، اطلاعات کاربر از دیتابیس MySQL احراز هویت می‌شود. از دفعات بعدی، Redis که سریع‌تر است، اطلاعات را ذخیره کرده و درخواست‌ها را پاسخ می‌دهد.

    ذخیره اطلاعات کاربر در Redis

    جمع بندی

    در این مقاله از لیارا، نحوه استفاده از Redis به‌عنوان کش برای بهبود عملکرد احراز هویت کاربران در کنار MySQL را به‌صورت کامل شرح داده‌ایم. با استفاده از Redis، درخواست‌های مکرر به دیتابیس MySQL کاهش می‌یابد و زمان پاسخ‌دهی به کاربران سریع‌تر می‌شود. به‌طور خلاصه، فرآیند احراز هویت کاربران در ابتدا از MySQL انجام می‌شود و سپس اطلاعات مربوط به کاربر در Redis ذخیره می‌شود. در نتیجه، در درخواست‌های بعدی، Redis بدون نیاز به دسترسی به MySQL، اطلاعات کاربر را سریع‌تر باز می‌گرداند.

    این رویکرد باعث بهبود مقیاس‌پذیری، کاهش بار بر روی دیتابیس و افزایش سرعت عملکرد برنامه می‌شود. در نتیجه، با پیاده‌سازی این سیستم، قادر خواهید بود تا از مزایای هر دو پایگاه داده MySQL برای ذخیره‌سازی پایدار و Redis برای کشینگ سریع بهره‌برداری کنید.

    برچسب‌ها: