मैं एक वेब सेवा डिज़ाइन कर रहा हूं जो रेडिस को डेटाबेस के रूप में उपयोग करता है, और मैं स्टैक सेवा क्लाइंट से कनेक्ट रेडिस का उपयोग करने के लिए सर्वोत्तम प्रथाओं को जानना चाहता हूं।रेडिस सर्विसस्टैक पूल कनेक्शन कनेक्शन क्लाइंट
बिंदु यह है कि मैं रेडिस के बारे में पढ़ रहा हूं और मैंने पाया कि सर्वर के साथ बातचीत करने का सबसे अच्छा तरीका एक समवर्ती कनेक्शन का उपयोग कर है।
समस्या यह है कि मैं PooledRedisClientManager हर बार है कि एक वेब ग्राहक वेब सेवा मैं एक एक और कनेक्ट किए गए ग्राहक (खोला कनेक्शन) redis सर्वर से प्राप्त करने के लिए एक अनुरोध और जुड़े ग्राहक की इस संख्या में आता है का उपयोग कर रहा के बावजूद अधिक से अधिक स्मृति उपभोग सीमा के बिना बढ़ता है।
नमूना 'गलती' कोड:
PooledRedisClientManager pooledClientManager = new PooledRedisClientManager("localhost");
var redisClient = pooledClientManager.GetClient();
using (redisClient)
{
redisClient.Set("key1", "value1");
}
क्या मैं समस्या को हल करने में किया था, एक स्थिर RedisClient
वर के साथ सिंगलटन पैटर्न को लागू करने के लिए एक वर्ग बनाने है, जो redisClient
प्रारंभ नहीं हुआ है, एक नया बनाता है, और यदि यह है, तो प्रारंभिक एक लौटाता है।
समाधान:
public class CustomRedisPooledClient
{
private static CustomRedisPooledClient _instance = null;
public RedisClient redisClient = null;
// Objeto sincronización para hacer el Lock
private static object syncLock = new object();
private CustomRedisPooledClient()
{
redisClient = new RedisClient("localhost");
}
public static CustomRedisPooledClient GetPooledClient()
{
if (_instance == null)
{
lock (syncLock)
{
if (_instance == null)
{
_instance = new CustomRedisPooledClient();
}
}
}
return _instance;
}
}
CustomRedisPooledClient customRedisPooledClient = CustomRedisPooledClient.GetPooledClient();
using (customRedisPooledClient.redisClient)
{
customRedisPooledClient.redisClient.Set("key1", "value1");
}
यह एक अच्छा अभ्यास है?
अग्रिम धन्यवाद!
आपने पूल से ** redisClient ** क्यों खींचा लेकिन इसका उपयोग नहीं कर रहे हैं? लेकिन इसके बजाय ** pooledClientManager ** का उपयोग कर रहे हैं? – mythz
यह प्रश्न लिखने में गलती थी, अब इसे –
के सही किया गया है, इसलिए मैं आपका प्रश्न संपादित करूँगा क्योंकि आपका 'गलती कोड' अब काम करता है और प्रदान किया गया ** समाधान ** आदर्श नहीं है। समस्या क्या थी और आदर्श समाधान के लिए स्वीकृत उत्तर का संदर्भ लें। – mythz