کلمه SETNX مخفف SET if Not Exist عه. کارش دقیقاً همینه: «تنها در صورتی این کلید رو بساز که از قبل وجود نداشته باشه».
در حالت عادی، وقتی تو ردیس مینویسی
SET key value، اگر کلید از قبل وجود داشته باشه، مقدار جدید روی قبلی اوررایت (Overwrite) میشه. اما SETNX اینطوری نیست:اگر کلید وجود نداشته باشه: اون رو میسازه و عدد
1 (یا همان True) برمیگردونه.اگر کلید وجود داشته باشه: هیچ کاری نمیکنه و عدد
0 (یا همان False) برمیگردونه.قدیما توسعهدهندهها اول
SETNX میزدن، بعد تو خط بعدی برای کلید یک زمان انقضا (EXPIRE) میذاشتن تا کلید تا ابد تو حافظه نمونه. اما این کار خطرساز بود! اگر سرور دقیقاً بعد از خط اول کرش میکرد، کلید تا ابد میموند و سیستم قفل میشد (Deadlock).امروزه در ردیس سینیورها از دستور توسعهیافتهی
SET با آپشنهای اختصاصی استفاده میکنند که کل این پروسه را اتمیک میکند:SET idempotency_key_123 "processing" NX EX 60
این دستور یعنی: «کلید رو بساز فقط اگر نبود (NX) و بعد از ۶۰ ثانیه منقضیش کن (EX 60)». همه اینها در یک میلیثانیه و بدون هیچ فاصلهای انجام میشه.
@codehalics | کدهالیک