در این مقاله به بررسی دستور GETSET
در Redis میپردازیم که یک عملیات اتمی برای دریافت مقدار فعلی و تنظیم مقدار جدید در یک کلید ارائه میدهد.
مقدمه دستور GETSET
دستور GETSET
دو عمل را به صورت اتمی انجام میدهد:
- مقدار فعلی کلید را برمیگرداند
- مقدار جدید را برای کلید تنظیم میکند
سینتکس:
GETSET key new_value
موارد استفاده کلیدی
- بازنشانی مقادیر شمارنده:
- مدیریت کوپنهای روزانه
- محدودیت درخواستهای API
- شمارش بازدیدها
- عملیات اتمی:
- جلوگیری از شرایط رقابتی
- اطمینان از یکپارچگی دادهها
مثالهای عملی
مثال 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"
مقایسه با روشهای جایگزین
روش | اتمی بودن | تعداد دستورات | کارایی |
---|---|---|---|
GETSET | ✓ | 1 | عالی |
GET + SET | ✗ | 2 | متوسط |
تراکنشها | ✓ | چندتایی | خوب |
بهترین روشهای استفاده
- مدیریت کوپنها و محدودیتها:
# تنظیم مقدار اولیه
SET api_limits 1000
# استفاده از سرویس
DECR api_limits
# بازنشانی ماهانه
GETSET api_limits 1000
- راهاندازی مجدد شمارندهها:
# دریافت آخرین مقدار و بازنشانی
GETSET page_views 0
- سیستمهای رایدهی:
# بازنشانی روزانه آرا
GETSET daily_votes 0
محدودیتها و نکات فنی
- نوع داده:
- فقط برای مقادیر رشتهای کار میکند
- با سایر ساختارهای داده (لیست، مجموعه و …) کار نمیکند
- رفتار با کلیدهای ناموجود:
- برای کلیدهای جدید،
nil
برمیگرداند - مقدار جدید را تنظیم میکند
- جایگزین در نسخههای جدید:
- در 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)
- جمعآوری آمار و بازنشانی دورهای
با استفاده صحیح از این دستور، میتوانید از شرایط رقابتی جلوگیری کرده و عملکرد بهتری در برنامههای توزیعشده داشته باشید.