2009-05-21 11 views
7

हम जावा एप्लिकेशन में कुछ प्रसंस्करण करना चाहते हैं, परिणामों को हमारे memcache सर्वर के पूल में संग्रहीत करना चाहते हैं, और PHP में memcache का उपयोग करके इसे वापस पढ़ें।क्या विभिन्न भाषाओं के memcache क्लाइंट हैश उसी तरह है?

यह कोशिश करने में काफी आसान है, लेकिन हालांकि मैं पूछूंगा और देख सकता हूं कि किसी और ने ऐसा किया है या नहीं।

जब तक जावा और PHP क्लाइंट दोनों memcache सर्वर के उसी पूल से कनेक्ट होते हैं, तो क्या दोनों क्लाइंट एक ही सर्वर स्थान पर हैश संभवतः PHP से पुनर्प्राप्ति कर सकते हैं?

+0

ऐसा करने से सिर्फ मेरे लिए एक बुरा विचार ... –

+2

+1 बहुत बढ़िया सवाल की तरह लगता है। बुरा विचार? हर्गिज नहीं। विभाजन भाषा वातावरण एक सुंदर आम परिदृश्य हैं। – cletus

+0

क्या आप विस्तृत कर सकते हैं? संकल्पनात्मक रूप से आप केवल 2 अलग-अलग भाषाओं से स्मृति में किसी स्थान पर डेटा लिख ​​रहे हैं ... यह अलग-अलग भाषाओं से उसी डेटाबेस में लिखने से भिन्न नहीं है। –

उत्तर

4

नहीं। सभी क्लाइंट हैंश समान नहीं हैं। इसके सबूत के रूप में, आप देखेंगे कि कुछ ग्राहक "लगातार हैशिंग" प्रदान करते हैं, जबकि अन्य नहीं करते हैं।

संक्षेप में, memcached ग्राहकों को कृपया किसी भी हैशिंग अलगो का उपयोग करने की अनुमति है। कोई आधिकारिक मानक नहीं है।

PHP क्लाइंट a variety of hashing algorithms का समर्थन करता है - इसलिए यह आपके जावा लाइब्रेरी का उपयोग करने वाले समान अहंकार का उपयोग करने के लिए कॉन्फ़िगर करना संभव हो सकता है (ऐसा लगता है कि वहां कई सारे हैं - जिनका आप उपयोग कर रहे हैं?)। लेकिन आप जाहिर तौर पर भारी परीक्षण करना चाहेंगे।

+0

हम्म दिलचस्प - विशेष रूप से जावा और PHP के बारे में क्या? –

1

क्रॉस-भाषा पहुंच की अनुमति देने की एक और संभावना भाषा क्रमबद्धता पर भरोसा नहीं करना चाहिए बल्कि पाठ की स्ट्रिंग के रूप में जेएसओएन प्रारूप में वस्तुओं को स्टोर करना होगा।

व्यक्तिगत रूप से, मैं जावा के लिए Gson और PHP में json_encode, json_decode का उपयोग करता हूं।

+0

धन्यवाद - हाँ यह समस्या का एक और हिस्सा है, लेकिन सबसे पहले आपको यह सुनिश्चित करने की ज़रूरत है कि सभी क्लाइंट हैंश उसी तरह से हैं ताकि आप केवल एक बार डेटा संग्रहित कर सकें। –

+0

आह हाँ, ज़ाहिर है, कुंजी .. अच्छी तरह से मैंने PHP को अभी तक याद नहीं किया है, लेकिन जावा के साथ जब आप कैश में ऑब्जेक्ट डालते हैं तो आप स्पष्ट रूप से इसे एक नाम देते हैं, उदाहरण के लिए यदि मैं टाइप का ऑब्जेक्ट कहता हूं आईडी 232 वाला व्यक्ति, मैं कुंजी "व्यक्ति -232" कहूंगा। यदि आप चाहते हैं कि आप अपना आवेदन नाम "YourApp-Person-232" और हैश सब कुछ SHA1 या MD5 के साथ प्रीपेड कर सकते हैं। यहां जावा SHA1 उत्पन्न करने का तरीका बताया गया है जो PHP एक जैसा ही है: http://stackoverflow.com/questions/4769007/can-you-get-this-same-java-sha-1-in-php-please/4769087 # 4769087 – stivlo

0

pylibmc

import pylibmc 

mc = pylibmc.Client(["127.0.0.1"], binary=True, 
        behaviors={"tcp_nodelay": True, 
           "ketama": True}) 

key="someKey" 
i=0 
while True: 
    #mc.set(key, str(i)) 
    value = mc.get(key) 
    print(value) 
    sleep(1) 
    i+=1 
संबंधित मुद्दे