در این مقاله می خوام در مورد sorted-set تو redis حرف بزنم
حالا sorted-set چیه؟
در واقع sorted-set یک ساختار داده است که از پیچیدگی زمانی o (log n) پیروی میکنه که باعث میشه در مقیاس های بالا بسیار کارآمد باشه بخوام واضح تر بگم اینه که حتی با افزایش تعداد اعضا، زمان دسترسی به دادهها افزایش پیدا نمیکنه و نتیحه سریع تر براتون برگشت داده میشه (n تعداد اعضا)
اصلا یادم رفت ساختارشو بگم اصلا برای چیه؟
بیشتر برای رتبده بندی استفاده میشه یعنی در واقع ساختارش اینه که یک score , member از شما میگیره
حالا به این دقت کنید من می خوام یک سری دانش آموزان رو بر اساس نمره مرتب کنم:
// comment اضافه کردن کاربران همراه با امتیاز ZADD leaderboard 10 "reza" ZADD leaderboard 15 "samaneh" ZADD leaderboard 12 "ali" ZADD leaderboard 20 "mehdi" // سورت کردن صعودی بر اساس امتیاز ZRANGE leaderboard 0 -1 WITHSCORES // سورت کردن بر اساس نزولی ZREVRANGE leaderboard 0 -1 WITHSCORES
در نظر بگیرید index ها تو این ساختار داده براساس رتبه به روز میشن و با حذف و اضافه بهم نمیریزه و سریع ترین شکل ممکن این عملیات انجام میشه
حالا یک مثال کاربردی بزنیم:
یک سیستمی دارید که می خواهید کاربران رو بر اساس تایم در خواستشون برای جوین شده به یک گروهی مرتبط کنید شما باید کاربرانی که قبل از در خواست جدید عضو گروه کنید:
ZADD user_requests 1627905600 "user1" ZADD user_requests 1627912800 "user2" ZADD user_requests 1627920000 "user3" ZADD user_requests 1627927200 "user4"
با این دستورات کاربران را با زمان درخواستشان (تایماستمپ یونیکس) به Sorted Set user_requests اضافه میکنیم و با دستور زیر سورت میکنیم:
ZRANGE user_requests 0 -1 WITHSCORES
حالا چرا نباید خودمون سورت کنیم:
در صورت سورت شدن توسط ما از پیچیدگی زمانی o(n log n) پیروی میکنه و باعث میشه برای اسکیل بالا سرعت و پرفورمنس خوبی نگیریم.
مثال کد golang که از پیچیدگی زمانی بالا استفاده میکنه o (n log n) :
https://go.dev/play/p/QgIyEkQVWoD