redis 排序通常用 zset ,但是如果相同的 score 排序是後面的拍前面
<code>function add($id,$member,$score =1){</code>
<code> //計數+1</code>
<code> $num = \Redis::HINCRBY('test:hash:'.$id,$member,$score);</code>
<code> $time = time();</code>
<code> $score = ($num * 10000000000) + 9999999999 - $time;</code>
<code> \Redis::zAdd('test:rank:'.$id,$score,$member);</code>
<code> }</code>
<code>function getMemberScore($id,$member){</code>
<code> return Redis::hget('test:hash:'.$id,$member);</code>
<code>function getList($id){</code>
<code> $list = Redis::ZREVRANGEBYSCORE('test:rank:'.$id, '+inf', '-inf', array('withscores' => TRUE, 'limit' => array(0, 10)));//\Redis::zrevrange('test:rank:666666',0,-1,'withscores')</code>
<code> //dump($list);</code>
<code> $arr = [];</code>
<code> if(!empty($list)){</code>
<code> foreach ($list as $key =>$row){</code>
<code> $arr[$key] =getMemberScore($id,$key);</code>
<code> }</code>
<code> }</code>
<code> return $arr;</code>
<code> // add(666666,11);</code>
<code> // add(666666,12,2);</code>
<code> // add(666666,13);</code>
<code> // add(666666,14,4);</code>
<code> add(666666,15);</code>
<code>dd(getList(666666));</code>
<code></code>
<code>array:5 [▼</code>
<code> 14 => "4"</code>
<code> 12 => "2"</code>
<code> 11 => "1"</code>
<code> 13 => "1"</code>
<code> 15 => "1"</code>
<code>>>> \Redis::hgetall('test:hash:666666')</code>
<code>=> [</code>
<code> 11 => "1",</code>
<code> 12 => "2",</code>
<code> 13 => "1",</code>
<code> 14 => "4",</code>
<code> 15 => "1"</code>
<code> ]</code>
<code>>>> \Redis::zrevrange('test:hash:666666',0,-1,'withscores')</code>
<code> 13 => "2",</code>
<code> 12 => "1",</code>
<code> 11 => "1"</code>
<code>>>> \Redis::zRevrank('test:rank:666666',14)</code>
<code>=> 0</code>