በRedis ውስጥ በትንሹ የተጠቀመውን ፕሮክሲ በአቶሚክ መንገድ መመደብ
የተደረጃጀተ ስብስብን እና አጭር የLua ስክሪፕትን በመጠቀም የፕሮክሲን የምደባ ቁጥር በወርከሮች መካከል ለመምረጥና ለመጨመር።
ብዙ ወርከሮች በRedis በኩል አንድ ገንዘብ መጋዘን ሲጋሩ፣ የተደረጃጀተ ስብስብ ቀላል ፖሊሲ ሊተገበር ይችላል፦ በትንሹ የተመዘገበ ምደባ ያለውን ብቁ ፕሮክሲ መምረጥ። የፕሮክሲ መለያን እንደ አባል እና የምደባ ቁጥሩን እንደ ውጤት ያስቀምጡ።
ለተፈቀዱ የህዝብ ጥያቄዎች የሚያገለግል ገንዘብ መጋዘን ሲኖር፣ የነፃ ፕሮክሲ ዝርዝሩ በዚያ ገንዘብ መጋዘን ብቁነት ደንቦች መመዘን የሚችሉ የመጨረሻ ነጥቦችን ሊያቀርብ ይችላል። ብቁ አባላትን በተስማማ የመጀመሪያ ቁጥር ያስጀምሩ። ከዚያ ምርጫውንና መጨመሩን አንድ የአገልጋይ ጎን ስራ ያድርጉ፦
local chosen = redis.call('ZRANGE', KEYS[1], 0, 0)[1]
if not chosen then
return nil
end
redis.call('ZINCRBY', KEYS[1], 1, chosen)
return chosenየተደረጃጀተ ስብስቡን ቁልፍ እንደ ስክሪፕቱ ብቸኛ የቁልፍ ክርክር በRedis ደንበኛዎ EVAL ገጽታ በኩል ያስተላልፉ። ባዶ ገንዘብ መጋዘን ጥያቄ ሳይላክ መተግበሪያው ማስተናገድ ያለበትን null ውጤት ይፈጥራል።
ሁለቱን ትዕዛዞች ለምን ማዋሃድ?
የተለያዩ ንባቦችና መጨመሪያዎች ሁለት ወርከሮች አንዳቸውም ከማዘመን በፊት ተመሳሳዩን ዝቅተኛ እሴት እንዲያዩ ያደርጋሉ። Redis የLua ስክሪፕትን በአቶሚክ መንገድ ያከናውናል፣ ስለዚህ ሌላ ወርከር በዚህ ስክሪፕት ንባብና መጨመር መካከል ምርጫ ማስገባት አይችልም። ስክሪፕቱን አጭር ያድርጉት ምክንያቱም አፈጻጸሙ ሌላ የRedis ስራን ይዘጋል።
ZRANGE ዝቅተኛውን ውጤት መጀመሪያ ይመልሳል፤ እኩል ውጤቶች በአባላት ቅደም ተከተል ይፈታሉ፣ በዘፈቀደ አይደለም። ZINCRBY የተመረጠውን አባል ውጤት ለቀጣዩ ምደባ በአንድ ይጨምራል።
ውጤቱ ምን ማለት እንደሆነ ይወስኑ
ይህ ምደባዎችን ይቆጥራል፣ የኔትወርክ ጥያቄው በኋላ ያልተሳካን ምደባ ጨምሮ። መዘግየትን፣ የተሳኩ ጥያቄዎችን ወይም አሁን በሂደት ላይ ያለውን ስራ አይለካም። ብቸኛውን ብቁ አባል ተደጋግሞ መምረጥ አሁንም ይቻላል፤ ስክሪፕቱ ለብቻው አይያዘውም።
ብቁነትን በገንዘብ መጋዘኑ ጤናና ፖሊሲ ደንቦች ያቆዩ። አባል አስወግደው በኋላ ካደሱት፣ ታሪካዊ ቁጥሩ መቀመጥ አለበት እንደሆነ ይወስኑ። የታደሰ ፕሮክሲን ከዜሮ መጀመር እሱ እየተከታተለ ሳለ ምደባዎችን በእሱ ላይ ሊያከማች ይችላል።
በትንሹ በአንድ ጊዜ የሚሰራ ፖሊሲ የተለየ የህይወት ዑደት ይፈልጋል፣ ማጠናቀቅንና የተተዉ ስራዎችን ማስተናገድን ጨምሮ። ይህን የተከማቸ ቆጣሪ እንደዚያ የህይወት ዑደት አድርገው አይተርጉሙት።