បែងចែកប្រូកស៊ីដែលប្រើតិចបំផុតដោយអាតូមិកក្នុង 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បញ្ជូនកូនសោសំណុំរៀបចំជាអាគុយម៉ង់កូនសោតែមួយគត់របស់ស្គ្រីប តាមរយៈចំណុចប្រទាក់ EVAL របស់ Redis client របស់អ្នក។ អាងទទេផ្តល់លទ្ធផល null ដែលកម្មវិធីត្រូវដោះស្រាយដោយមិនបញ្ជូនសំណើ។
ហេតុអ្វីបញ្ចូលពាក្យបញ្ជាទាំងពីរ?
ការអាន និងការបង្កើនដាច់ដោយឡែក អនុញ្ញាតឱ្យកម្មករពីរមើលឃើញអប្បបរមាដូចគ្នា មុនពេលណាមួយធ្វើបច្ចុប្បន្នភាព។ Redis ប្រតិបត្តិស្គ្រីប Lua ជាអាតូមិក ដូច្នេះកម្មករផ្សេងមិនអាចដាក់ការជ្រើសរើសចន្លោះការអាន និងការបង្កើនរបស់ស្គ្រីបនេះបានទេ។ រក្សាស្គ្រីបឱ្យខ្លី ព្រោះការប្រតិបត្តិរបស់វារារាំងការងារ Redis ផ្សេង។
ZRANGE ផ្តល់ពិន្ទុទាបបំផុតជាមុន។ ពិន្ទុស្មើគ្នាត្រូវបានដោះស្រាយតាមលំដាប់សមាជិក មិនមែនដោយចៃដន្យទេ។ ZINCRBY បង្កើនពិន្ទុរបស់សមាជិកដែលបានជ្រើសដោយមួយ សម្រាប់ការបែងចែកបន្ទាប់។
កំណត់អត្ថន័យពិន្ទុ
នេះរាប់ការបែងចែក រួមទាំងការបែងចែកដែលសំណើបណ្តាញរបស់វាបរាជ័យនៅពេលក្រោយ។ វាមិនវាស់ភាពយឺត សំណើជោគជ័យ ឬការងារកំពុងដំណើរការទេ។ ការជ្រើសរើសសមាជិកតែមួយគត់ដែលមានសិទ្ធិម្តងហើយម្តងទៀតនៅតែអាចធ្វើបាន។ ស្គ្រីបមិនបានកក់វាជាពិសេសទេ។
រក្សាសិទ្ធិដោយច្បាប់សុខភាព និងគោលការណ៍របស់អាង។ ប្រសិនបើអ្នកដកសមាជិក ហើយស្តារវាឡើងវិញនៅពេលក្រោយ សូមសម្រេចថាតើត្រូវរក្សាចំនួនប្រវត្តិរបស់វាឬអត់។ ការចាប់ផ្តើមប្រូកស៊ីដែលបានស្តារពីសូន្យអាចប្រមូលការបែងចែកមកលើវា ខណៈវាតាមទាន់។
គោលការណ៍ប៉ារ៉ាឡែលតិចបំផុតត្រូវការវដ្តជីវិតខុសគ្នា រួមទាំងការបញ្ចប់ និងការដោះស្រាយការងារដែលបោះបង់។ កុំបកស្រាយឧបករណ៍រាប់បូកនេះថាជាវដ្តជីវិតនោះ។