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

समस्या निवारण मुद्दे

डेटा करप्शन से जुड़ी समस्याएं #

एक समस्या जिसे डिबग करना कठिन हो सकता है यदि वही RedisClient . है उदाहरण कई थ्रेड्स में साझा किया जाता है जिसके परिणामस्वरूप दूषित डेटा वापस आ सकता है। आमतौर पर, यह IRedisClient . का उपयोग करने का परिणाम है एक सिंगलटन उदाहरण में फ़ील्ड या इसे स्थिर उदाहरण के रूप में साझा करना। इसे रोकने के लिए, रेडिस का उपयोग करने वाले प्रत्येक थ्रेड को रेडिस क्लाइंट को एक प्रयोग कथन के भीतर पुनः प्राप्त करना चाहिए, जैसे:

using var redis = redisManager.GetClient();
//...

दुर्भाग्य से कॉल-साइट जो दूषित प्रतिक्रिया या रनटाइम अपवाद देता है, यह पहचान नहीं करता है कि रेडिस क्लाइंट इंस्टेंस का और कहां उपयोग किया जा रहा था। यह पहचानने में सहायता के लिए कि क्लाइंट इंस्टेंस का उपयोग कहां किया जा रहा है, आप यह दावा कर सकते हैं कि क्लाइंट का उपयोग केवल उस थ्रेड में किया जाता है जिसने इसे पूल से हल किया:

RedisConfig.AssertAccessOnlyOnSameThread = true;

यह थ्रेड के स्टैकट्रेस को कैप्चर करता है जब भी क्लाइंट को पूल से हल किया जाता है, क्योंकि यह बहुत अधिक ओवरहेड जोड़ता है, केवल कनेक्शन समस्याओं को डीबग करते समय सक्षम किया जाना चाहिए।

यदि यह पता लगाता है कि क्लाइंट को किसी भिन्न थ्रेड से एक्सेस किया जा रहा है तो यह एक InvalidAccessException फेंक देगा। विभिन्न थ्रेड आईडी . वाले संदेश के साथ और मूल स्टैकट्रेस जहां ग्राहक को पूल से हल किया गया था। आप इसकी तुलना अपवाद के स्टैकट्रेस से कर सकते हैं ताकि उम्मीद की जा सके कि क्लाइंट का अनुचित तरीके से उपयोग किया जा रहा है।

समवर्ती उपयोग की समस्याओं से बचना #

IRedisClient के एकाधिक समवर्ती उपयोग से बचने के लिए अपने कोड-बेस में क्या देखना है उदाहरण:

  • IRedisClient का उपयोग करें एक using . के भीतर रेडिस इंस्टेंस क्लाइंट बयान
  • किसी क्लाइंट इंस्टेंस को डिस्पोज़ किए जाने के बाद कभी भी उसका उपयोग न करें
  • क्लाइंट के निपटान के बाद कभी भी "सर्वर संग्रह या संसाधन" (जैसे Redis.Lists, lock) का उपयोग (या वापस) न करें
  • एक सिंगलटन या static कभी न रखें एक रेडिस क्लाइंट के लिए उदाहरण (सिर्फ IRedisClientsManager कारखाना)
  • कभी भी एक ही रेडिस क्लाइंट को कई थ्रेड्स में उपयोग न करें, यानी प्रत्येक थ्रेड को फ़ैक्टरी से अपने क्लाइंट को हल करने के लिए कहें

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. क्लस्टर का उपयोग करके Socket.IO को कई Node.js प्रक्रियाओं में स्केल करना

  2. रेडिस सॉर्टेडसेट बैलेंस्ड ट्री के बजाय स्किप लिस्ट का उपयोग क्यों करता है?

  3. रेडिस पब सब-मैक्स सब्सक्राइबर और पब्लिशर्स

  4. निर्भरता को हल करने का प्रयास:.NET मानक लाइब्रेरी को NET कोर में बदलना - Microsoft.Extensions.Primitives

  5. रेडिस हाइबरनेट दूसरे स्तर के कैश के रूप में