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

स्प्रिंग डेटा रेडिस:रेडिस पाइपलाइन हमेशा अशक्त लौटती है

आपके अधिकांश प्रश्न स्प्रिंग डेटा रेडिस संदर्भ दस्तावेज़ में उपलब्ध हैं।

पाइपलाइनिंग में खुदाई करने से पहले, एक हैश से एकल मल्टी-गेट को पाइपलाइनिंग की आवश्यकता नहीं होती है क्योंकि यह केवल एक ही कमांड है। पाइपलाइनिंग आपके Redis इंटरैक्शन के प्रदर्शन/स्थिरता/… में सुधार नहीं करेगी।

पाइपलाइनिंग को कॉलबैक के रूप में व्यवस्थित किया जाता है और तुरंत परिणाम की प्रतीक्षा किए बिना कई कमांड जारी करने का इरादा है - इसे एक बैच के रूप में सोचें जहां आपको बाद में सभी परिणाम मिलते हैं। क्योंकि पाइपलाइनिंग प्रतिक्रियाओं को बहुत अंत में सिंक्रनाइज़ करता है, आपको कॉलबैक के भीतर परिणाम मान प्राप्त नहीं होते हैं, लेकिन बहुत अंत में, जब पाइपलाइनिंग सत्र सिंक्रनाइज़ किया जाता है और executePipelined(…) समाप्त होता है।

आपका कोड इस तरह दिखना चाहिए:

List<Object> results = getRedisTemplate().executePipelined(new RedisCallback<Object>() {

    @Override
    public Object doInRedis(RedisConnection connection) {

            connection.hMGet(key.getBytes(), params);

            return null;
    }
});

List<Object> hmget = (List<Object>) results.get(0);

आपको केवल उस कनेक्शन का उपयोग करना होगा जो आपको कॉलबैक तर्क के रूप में प्राप्त होता है क्योंकि कनेक्शन पाइपलाइनिंग मोड में प्रवेश कर चुका है। कॉलबैक के बाहर से कनेक्शन प्राप्त करना (जैसे template.getConnectionFactory().getConnection() ) एक नया कनेक्शन खोलेगा और प्रतीक्षारत प्रतिक्रियाओं के साथ रेडिस कमांड निष्पादित करेगा - किसी भी बाहरी प्राप्त कनेक्शन पर कोई पाइपलाइनिंग लागू नहीं होती है।

आप RedisTemplate . की विधियों का भी उपयोग कर सकते हैं सादे कनेक्शन के साथ काम करने के बजाय। executePipelined(…) कॉलबैक में उपयोग किए गए कनेक्शन को वर्तमान थ्रेड से बांधता है और यदि आप टेम्पलेट API विधियों को कॉल करते हैं तो उस बाध्य कनेक्शन का पुन:उपयोग करता है।

आपके लुआ प्रश्न के संबंध में:कोड/विधि कॉल लुआ में स्थानांतरित नहीं होते हैं।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. अधिकतम प्रयास अपवाद कतार से आगे निकल गए

  2. क्या मैं ब्राउज़र में चल रहे जावास्क्रिप्ट से सीधे रेडिस सर्वर से जुड़ सकता हूं?

  3. रेडिस क्लस्टर में पैटर्न से मेल खाने वाली चाबियों को कैसे हटाएं

  4. BookSleeve से BGSAVE को कैसे कॉल करें?

  5. कैशे रेडिस की समाप्ति को 1 वर्ष पर सेट करें