Redis
 sql >> डेटाबेस >  >> NoSQL >> Redis

रेडिस:हर दिन काउंटर रीसेट करें

मध्यरात्रि में होने वाले दो समवर्ती लेनदेन पर विचार करें। दोनों get(dt_key) निष्पादित कर सकते हैं, लेकिन कोई पहले MULTI/EXEC ब्लॉक निष्पादित करेगा। यह काउंटर को रीसेट करेगा, नई तिथि निर्धारित करेगा, काउंटर को बढ़ाएगा। दूसरा अपने MULTI/EXEC ब्लॉक में भी प्रवेश करेगा, लेकिन क्योंकि 'dt' का मान बदल गया है, निष्पादन विफल हो जाएगा, और incr_daily_number को फिर से कॉल किया जाएगा। इस बार get(dt_key) नई तारीख लौटाएगा, इसलिए जब MULTI/EXEC ब्लॉक निष्पादित किया जाएगा, तो काउंटर बिना किसी रीसेट के बढ़ा दिया जाएगा। दो लेन-देन अलग-अलग काउंटर वैल्यू के साथ नई तारीख लौटाएंगे।

इसलिए, मेरा मानना ​​है कि यहां कोई दौड़ की स्थिति नहीं है, और (तारीख, संख्या) जोड़े अद्वितीय होंगे।

आप इसे सर्वर-साइड लुआ स्क्रिप्ट का उपयोग करके भी कार्यान्वित कर सकते थे (जिसका निष्पादन हमेशा परमाणु होता है)। यह आमतौर पर अधिक सुविधाजनक होता है।

ध्यान दें कि वास्तव में, रेडिस लॉक जैसी कोई चीज नहीं है। एपीआई में उपलब्ध लॉकिंग तंत्र पायथन क्लाइंट द्वारा प्रदान किया जाता है - रेडिस सर्वर द्वारा नहीं। यदि आप इसके कार्यान्वयन को देखते हैं, तो आप महसूस करेंगे कि यह SETNX + WATCH/MULTI/EXEC ब्लॉक या Lua स्क्रिप्टिंग पर भी आधारित है।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. क्या प्रत्येक कॉल phpredis में एक बहु () कॉल के परिणामस्वरूप रेडिस के लिए एक नया नेटवर्क राउंडट्रिप होता है?

  2. मुरमुरहाश - यह क्या है?

  3. 500MB Redis dump.rdb फ़ाइल में लगभग 5.0GB मेमोरी क्यों लगती है?

  4. NestJS socket.io-redis:6.0.1

  5. ज़ैड की समय जटिलता जब लक्षित सॉर्ट किए गए सेट में मौजूद उच्चतम स्कोर से अधिक स्कोर होता है