2013-05-20 7 views
5

किसी Redis में किसी भी प्रकार की छाया हुआ डेटा संरचना को लागू किया गया है? मैं एक समाचार फ़ीड की तरह कुछ बनाने पर काम कर रहा हूँ। फ़ीड को घुमाया जाएगा और बहुत बार से पढ़ा जाएगा, और इसे रेडिस में एक क्रमबद्ध सेट में पकड़ा जाएगा मेरे उपयोग के मामले के लिए सस्ता और सही होगा। एकमात्र मुद्दा यह है कि मुझे केवल प्रति फ़ीड एन आइटम की आवश्यकता है, और मैं मेमोरी ओवरफ्लो के बारे में चिंतित हूं, इसलिए मैं यह सुनिश्चित करना चाहता हूं कि प्रत्येक फ़ीड एन आइटम से ऊपर न हो।रेडिस कैप्ड सेट, सूची, या कतार?

redis-cli EVAL "$(cat update_feed.lua)" 1 feeds:some_feed "thing_to_add", n 

कहाँ update_feed.lua (परीक्षण) के बिना तरह दिखता है:: यह लुआ साथ Redis में एक छाया हुआ क्रमबद्ध संग्रह करने के लिए बहुत तुच्छ लगती

redis.call('ZADD', KEYS[1], os.time(), ARGV[1]) 
local num = redis.call('ZCARD', KEYS[1]) 
if num > ARGV[2]: 
    redis.call('ZREMRANGEBYRANK', KEYS[1], -n, -inf) 

कि बिल्कुल बुरा नहीं है, और सुंदर सस्ता है, लेकिन ऐसा लगता है कि इस तरह की एक मूल चीज है जो सॉर्ट किए गए सेट को तुरंत शुरू करने के साथ ही अधिक बाल्टी के साथ शुरू करने के लिए और अधिक सस्ता हो सकती है। मैं redis में है, इसलिए मुझे लगता है कि है कि मेरे सवाल यह है कि क्या करने के लिए एक तरह से नहीं मिल सकता है: मैं कुछ याद आती है, और अगर मैं ऐसा नहीं किया, क्यों redis में इसके लिए कोई संरचना है, भले ही यह सिर्फ बुनियादी लुआ दौड़ा किया स्क्रिप्ट मैंने वर्णित किया है, ऐसा लगता है कि यह एक सामान्य पर्याप्त उपयोग-मामला होगा कि इसे रेडिस डेटा संरचनाओं के विकल्प के रूप में कार्यान्वित किया जाना चाहिए?

+1

आइटम जोड़ना और लुआ स्क्रिप्ट या बहु/EXEC ब्लॉकों का उपयोग कर डेटा संरचना ट्रिमिंग तुम क्या करने की अपेक्षा की जाती है। इसे स्वचालित रूप से करने के लिए कोई विशिष्ट विकल्प नहीं है। –

+0

@DidierSpezia क्या आप इसे एक उत्तर के रूप में जोड़ सकते हैं, इसलिए मैं इसे स्वीकार कर सकता हूं? – Eli

+0

आपको gkamal के उत्तर को स्वीकार करना चाहिए यह मेरे लिए ठीक लग रहा है। –

उत्तर

15

आप LTRIM उपयोग कर सकते हैं अगर यह एक सूची है। दस्तावेज़ से

अंश।

LPUSH mylist someelement 
LTRIM mylist 0 99 

आदेश, सूची में एक नए तत्व धक्का होगा, जबकि यह सुनिश्चित करें कि सूची 100 तत्वों से भी बड़ा हो जाना नहीं होगा बनाने का यह जोड़ी। उदाहरण के लिए लॉग स्टोर करने के लिए रेडिस का उपयोग करते समय यह बहुत उपयोगी होता है। यह ध्यान रखना महत्वपूर्ण है कि इस तरह प्रयोग किया जाता है जब एलटीआरआईएम एक ओ (1) ऑपरेशन होता है क्योंकि औसत मामले में सूची की पूंछ से केवल एक तत्व हटा दिया जाता है।

+0

पूरा अनुभाग आधिकारिक रेडिस दस्तावेज से निकाला गया है :-) – gkamal

1

मैं क्रमबद्ध का उपयोग अपने आप को इस बात के लिए सेट करता है। मैंने भी सूचियों का उपयोग करने के बारे में सोचा, लेकिन फिर मैंने पाया कि एक सूची के अंदरूनी चीज काफी महंगा है - ओ (एन) - एक क्रमबद्ध सेट के अंदर हेरफेर करना ओ (लॉग एन) है।

यही कारण है कि मेरे लिए सौदा सील है - क्या तुमने कभी सेट के अंदर से छेड़छाड़ की जाएगी? यदि ऐसा है, तो सॉर्ट किए गए सेट के साथ चिपके रहें और जब भी आप सोच रहे हों, बस सबसे पुराना फ्लश करें।

संबंधित मुद्दे