در این مقاله به بررسی دستور GETSET در Redis می‌پردازیم که یک عملیات اتمی برای دریافت مقدار فعلی و تنظیم مقدار جدید در یک کلید ارائه می‌دهد.

مقدمه دستور GETSET

دستور GETSET دو عمل را به صورت اتمی انجام می‌دهد:

  1. مقدار فعلی کلید را برمی‌گرداند
  2. مقدار جدید را برای کلید تنظیم می‌کند

سینتکس:

GETSET key new_value

موارد استفاده کلیدی

  1. بازنشانی مقادیر شمارنده:
  • مدیریت کوپن‌های روزانه
  • محدودیت درخواست‌های API
  • شمارش بازدیدها
  1. عملیات اتمی:
  • جلوگیری از شرایط رقابتی
  • اطمینان از یکپارچگی داده‌ها

مثال‌های عملی

مثال 1: استفاده پایه

SET counter 10
GETSET counter 20  # برمی‌گرداند: "10"
GET counter       # برمی‌گرداند: "20"

مثال 2: مدیریت کوپن‌های روزانه

# مقدار اولیه
SET daily_coupons 100

# مصرف کوپن‌ها
DECR daily_coupons  # 99
DECR daily_coupons  # 98
# ...

# در پایان روز
GETSET daily_coupons 100  # مقدار فعلی (مثلاً 42) را برمی‌گرداند و مقدار را به 100 بازمی‌گرداند

مثال 3: بازنشانی اتمی

# اگر کلید وجود نداشته باشد
GETSET new_key "initial"  # برمی‌گرداند: (nil)
GET new_key               # برمی‌گرداند: "initial"

مقایسه با روش‌های جایگزین

روشاتمی بودنتعداد دستوراتکارایی
GETSET1عالی
GET + SET2متوسط
تراکنش‌هاچندتاییخوب

بهترین روش‌های استفاده

  1. مدیریت کوپن‌ها و محدودیت‌ها:
   # تنظیم مقدار اولیه
   SET api_limits 1000

   # استفاده از سرویس
   DECR api_limits

   # بازنشانی ماهانه
   GETSET api_limits 1000
  1. راه‌اندازی مجدد شمارنده‌ها:
   # دریافت آخرین مقدار و بازنشانی
   GETSET page_views 0
  1. سیستم‌های رای‌دهی:
   # بازنشانی روزانه آرا
   GETSET daily_votes 0

محدودیت‌ها و نکات فنی

  1. نوع داده:
  • فقط برای مقادیر رشته‌ای کار می‌کند
  • با سایر ساختارهای داده (لیست، مجموعه و …) کار نمی‌کند
  1. رفتار با کلیدهای ناموجود:
  • برای کلیدهای جدید، nil برمی‌گرداند
  • مقدار جدید را تنظیم می‌کند
  1. جایگزین در نسخه‌های جدید:
  • در Redis 6.2.0 می‌توان از SET با پارامتر GET استفاده کرد:
    redis SET key new_value GET

مثال پیشرفته: سیستم مدیریت کوپن

# مقداردهی اولیه
SET daily_coupons:2023-01-01 50

# مصرف کوپن
DECR daily_coupons:2023-01-01

# بررسی موجودی
GET daily_coupons:2023-01-01

# در پایان روز
GETSET daily_coupons:2023-01-01 0
# مقدار بازگشتی نشان‌دهنده تعداد کوپن‌های استفاده نشده است

جمع‌بندی

دستور GETSET یک ابزار قدرتمند برای سناریوهای زیر است:

  • مدیریت و بازنشانی شمارنده‌ها
  • عملیات اتمی روی مقادیر
  • سیستم‌های محدودیت نرخ (Rate Limiting)
  • جمع‌آوری آمار و بازنشانی دوره‌ای

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

Categorized in: