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 ପରବର୍ତ୍ତୀ ଆବଣ୍ଟନ ପାଇଁ ଚୟନିତ ସଦସ୍ୟର ସ୍କୋର ଏକ ବୃଦ୍ଧି କରେ।
ସ୍କୋରର ଅର୍ଥ ନିର୍ଧାରଣ କରନ୍ତୁ
ଏହା ଆବଣ୍ଟନ ଗଣେ, ଯେଉଁ ଆବଣ୍ଟନର ନେଟୱାର୍କ ଅନୁରୋଧ ପରେ ବିଫଳ ହୁଏ ତାହା ମଧ୍ୟ ଅନ୍ତର୍ଭୁକ୍ତ। ଏହା ବିଳମ୍ବ, ସଫଳ ଅନୁରୋଧ କିମ୍ବା ଚାଲୁଥିବା କାର୍ଯ୍ୟ ମାପେ ନାହିଁ। ଏକମାତ୍ର ଯୋଗ୍ୟ ସଦସ୍ୟକୁ ବାରମ୍ବାର ଚୟନ କରିବା ଏବେ ମଧ୍ୟ ସମ୍ଭବ; ସ୍କ୍ରିପ୍ଟ ଏହାକୁ ଏକଚ୍ଛତ୍ର ଭାବରେ ସଂରକ୍ଷିତ ରଖେ ନାହିଁ।
ପୁଲ୍ର ସ୍ୱାସ୍ଥ୍ୟ ଓ ନୀତି ନିୟମ ଦ୍ୱାରା ଯୋଗ୍ୟତା ବଜାୟ ରଖନ୍ତୁ। ଯଦି ଜଣେ ସଦସ୍ୟ ଅପସାରଣ କରି ପରେ ପୁନଃସ୍ଥାପିତ କରନ୍ତି, ତାହାର ଐତିହାସିକ ଗଣନା ରଖିବା ଉଚିତ କି ନୁହେଁ ସ୍ଥିର କରନ୍ତୁ। ପୁନଃସ୍ଥାପିତ ପ୍ରକ୍ସିକୁ ଶୂନ୍ୟରୁ ଆରମ୍ଭ କଲେ ଏହା ସମାନ ହେବା ବେଳେ ଆବଣ୍ଟନ ତା ଉପରେ କେନ୍ଦ୍ରୀଭୂତ ହୋଇପାରେ।
ସର୍ବନିମ୍ନ-ସମବର୍ତ୍ତୀ ନୀତି ପାଇଁ ଭିନ୍ନ ଜୀବନଚକ୍ର ଆବଶ୍ୟକ, ଯେଉଁଥିରେ ସମାପ୍ତି ଓ ପରିତ୍ୟକ୍ତ କାର୍ଯ୍ୟର ପରିଚାଳନା ଅନ୍ତର୍ଭୁକ୍ତ। ଏହି ସଞ୍ଚିତ ଗଣକକୁ ସେହି ଜୀବନଚକ୍ର ଭାବରେ ବ୍ୟାଖ୍ୟା କରନ୍ତୁ ନାହିଁ।