讨论数量: 
            
            
    
            数量少,函数array_multisort()结合array_column(),排序完,取前十个
延申题,看使用场景,可以第一次可以使用简单yield,循环计算出符合排序的前二十个,并缓存,下一次产生新数据,只需要和这二十个比较,为什么是二十个,避免分数相同的情况要从源数据从新对比
简单回答,不保证对 :joy:
用redis的string和list,手动维护一个有序的list
    $time = $redis->get('key:' . $grade)
    if ($time && $time < $new_time) {
        $redis->rPush('list:' . $grade, $id)
    } else {
        $redis->lPush('list:' . $grade, $id)
        // 记录更新当前分数时间
        $redis->set('key:' . $grade, $new_time)
    }
最后把100个list合并成一个list就好了。
laravel有个collect方法很好用 这个是并列排名的实现方法 可以参考一下
collect($data)
    ->groupBy('grade')
    ->sortKeysDesc(SORT_NUMERIC)
    ->values()
    ->each(function ($data, $key) {
        foreach ($data as $datum) {
            $datum['rank'] = $key + 1;
        }
    })
    ->toArray();
            没那么多想法,我想的就2种
1、根据排行榜时效性需求 用数据库查出来 更新缓存ttl 减少数据库查询
2、空间换时间,单独一张排行榜表,在插入的时候,判断排行值
 条件1,排行表不满足10条 插入当前数据
 条件2、排行榜表满足10条,插入的数据排行值是否大于最小值
   不大于 放弃 大于 删除最少值 插入当前数据
 独立的10条数据表,怎样操作都无所谓了吧
          
                    
                    
            
          
          
                关于 LearnKu
              
                    
                    
                    
 
推荐文章: