मुझे लगता है कि आप कतार . पर काम कर रहे हैं , जहां आप एक ही स्थान पर 1000 आइटम सम्मिलित करते हैं और उन्हें एक से अधिक स्थानों पर पुनः प्राप्त करते हैं उस क्रम में जिस क्रम में इसे डाला जाता है .
आप इसे एक कमांड से हासिल नहीं कर सकते हैं लेकिन आप इसे 2 कमांड के साथ कर सकते हैं। आप उन्हें परमाणु बनाने के लिए एक लुआ लिपि लिख सकते हैं।
रेंज:http://redis.io/commands/lrange
Lrange list -100 -1
यह आपको सूची में पहले 100 तत्वों की सूची देगा। यहां ऑफसेट -100 है। ध्यान दें कि यह आइटम को विपरीत क्रम में वापस कर देगा जिस पर इसे डाला गया है। तो आपको कतार तंत्र को सुनिश्चित करने के लिए लूप को उलटने की जरूरत है।
एलट्रिम:http://redis.io/commands/ltrim
ltrim list 0 -101
यह सूची में पहले 100 तत्वों को ट्रिम कर देगा। यहाँ 101 n+1 है इसलिए यह 101 होना चाहिए। यहाँ ऑफ़सेट 101 है
उन्हें लुआ ब्लॉक के अंदर लिखना आपको परमाणुता सुनिश्चित करेगा।
मैं आपको एक सरल उदाहरण देता हूं।
<ब्लॉकक्वॉट>आप एक ही स्थान पर 100 तत्व सम्मिलित करते हैं।
lpush list 1 2 3 .. 100
<ब्लॉकक्वॉट> आपके पास इस लुआ ब्लॉक तक पहुंचने का प्रयास करने वाले प्रत्येक ग्राहक हैं। मान लें कि आपका n मान यहां 5 है। पहला ग्राहक प्रवेश करता है और पहले 5 तत्व सम्मिलित करता है।
127.0.0.1:6379> lrange list -5 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
<ब्लॉकक्वॉट> आप उन्हें अपने लुआ ऑब्जेक्ट में रखें और उन्हें हटा दें।
127.0.0.1:6379> LTRIM list 0 -6
OK
उन्हें अपने कोड पर वापस कर दें, अब आप जो परिणाम चाहते हैं वह 1 2 3 4 5 है लेकिन आपको जो मिला है वह 5 4 3 2 1 है। इसलिए आपको लूप को उलटने और ऑपरेशन करने की आवश्यकता है।
जब अगला क्लाइंट इसमें आएगा तो उसे मूल्यों का अगला सेट मिलेगा।
127.0.0.1:6379> lrange list -5 -1
1) "10"
2) "9"
3) "8"
4) "7"
5) "6"
इस तरह आप अपनी आवश्यकता को प्राप्त कर सकते हैं। उम्मीद है ये मदद करेगा।
संपादित करें:
लुआ लिपि:
local result = redis.call('lrange', 'list','-5','-1')
redis.call('ltrim','list','0','-6')
return result