天天看點

redis zset 排序

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' =&gt; TRUE, 'limit' =&gt; 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 =&gt;$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 =&gt; "4"</code>

<code> 12 =&gt; "2"</code>

<code> 11 =&gt; "1"</code>

<code> 13 =&gt; "1"</code>

<code> 15 =&gt; "1"</code>

<code>&gt;&gt;&gt; \Redis::hgetall('test:hash:666666')</code>

<code>=&gt; [</code>

<code>      11 =&gt; "1",</code>

<code>      12 =&gt; "2",</code>

<code>      13 =&gt; "1",</code>

<code>      14 =&gt; "4",</code>

<code>      15 =&gt; "1"</code>

<code>  ]</code>

<code>&gt;&gt;&gt; \Redis::zrevrange('test:hash:666666',0,-1,'withscores')</code>

<code>      13 =&gt; "2",</code>

<code>      12 =&gt; "1",</code>

<code>      11 =&gt; "1"</code>

<code>&gt;&gt;&gt; \Redis::zRevrank('test:rank:666666',14)</code>

<code>=&gt; 0</code>

繼續閱讀