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 تاللانغان ئەزانىڭ نومۇرىنى كېيىنكى تەقسىمات ئۈچۈن بىرگە كۆپەيتىدۇ.
نومۇرنىڭ مەنىسىنى بەلگىلەڭ
بۇ تەقسىماتلارنى سانايدۇ، شۇنىڭ ئىچىدە تور تەلىپى كېيىن مەغلۇپ بولىدىغان تەقسىماتمۇ بار. ئۇ كېچىكىشنى، مۇۋەپپەقىيەتلىك تەلەپلەرنى ياكى داۋاملىشىۋاتقان خىزمەتنى ئۆلچىمەيدۇ. بىردىنبىر لاياقەتلىك ئەزانى قايتا-قايتا تاللاش يەنىلا مۇمكىن؛ قوليازما ئۇنى ئالاھىدە ساقلىمايدۇ.
لاياقەتنى كۆلچەكنىڭ ساغلاملىق ۋە سىياسەت قائىدىسى بىلەن ساقلاڭ. بىر ئەزانى چىقىرىۋېتىپ كېيىن ئەسلىگە كەلتۈرسىڭىز، ئۇنىڭ تارىخىي سانىنى ساقلاش-ساقلىماسلىقنى قارار قىلىڭ. ئەسلىگە كەلتۈرۈلگەن ۋاكالەتچىنى نۆلدىن باشلاش ئۇ قۇيۇپ يېتىشكەنچە تەقسىماتلارنى ئۇنىڭغا مەركەزلەشتۈرۈشى مۇمكىن.
ئەڭ ئاز ئوخشاش ۋاقىتلىق سىياسەت باشقا ھايات دەۋرىنى تەلەپ قىلىدۇ، شۇنىڭ ئىچىدە تاماملاش ۋە تاشلاندۇق خىزمەتلەرنى بىر تەرەپ قىلىش بار. بۇ جەمئىي سانلىقنى ئۇ ھايات دەۋرى دەپ چۈشەندۈرمەڭ.