Redis 使用記錄(六)

Sorted Set(有序集合)

Sorted Set 和 Set 同樣,也是 String 類型的集合,且成員惟一。不一樣的是 Sorted Set
會關聯一個 double 類型的 score(分數),用於進行排序。
成員是惟一的,可是score能夠重複,若是score重複,會使用字典排序
最大的成員數爲 232 - 1 個元素(40多億)。php

應用場景

按照分數進行排列

將用戶與分數(遊戲分數、考試成績、點贊數)進行關聯,而後進行排序。html

任務隊列

將任務分爲不一樣的等級,例如重要爲2,不重要爲1,根據優先級安排任務。redis

實例

<?php
include 'redis.php';

$redis = getRedis();
$redisKey = 'name_scorted_set';

$redis->zAdd($redisKey, 78, 'tom', 78, 'jerry');// 添加成員
echo $redis->zCard($redisKey) . '<br />';// 獲取成員數 2
$redis->zIncrBy($redisKey, 2, 'jerry');// 對指定值進行增量
print_r($redis->zRange($redisKey, 0, -1));// 獲取指定索引區間的值,從小到大,示例爲獲取全部值 Array ( [0] => tom [1] => jerry )
echo '<br />';
print_r($redis->zRevRange($redisKey, 0, -1));// 獲取指定索引區間的值,從大到小,示例爲獲取全部值 Array ( [0] => jerry [1] => tom )
echo '<br />';
echo $redis->zScore($redisKey, 'jerry') . '<br />';// 獲取指定值的分數 80
echo $redis->zCount($redisKey, 70, 79) . '<br />';// 獲取指定分數指定區間的數量 1
print_r($redis->zRangeByScore($redisKey, 70, 80));// 獲取指定分數間的數據,從小到大 Array ( [0] => tom [1] => jerry )
echo '<br />';
print_r($redis->zRevRangeByScore($redisKey, 80, 70));// 獲取指定分數間的數據,從大到小 Array ( [0] => jerry [1] => tom )
echo '<br />';
echo $redis->zRank($redisKey, 'jerry') . '<br />';// 獲取指定值的索引,從小到大 1
echo $redis->zRevRank($redisKey, 'jerry') . '<br />';// 獲取指定值的索引,從大到小 0
$redis->zAdd($redisKey, 56, 'emma');
$redis->zRem($redisKey, 'tom');// 移除指定值
print_r($redis->zRange($redisKey, 0, -1));// Array ( [0] => emma [1] => jerry )
echo '<br />';
$redis->zRemRangeByRank($redisKey, 1, 2);// 移除指定排名區間的成員
print_r($redis->zRange($redisKey, 0, -1));// Array ( [0] => emma )
echo '<br />';
$redis->zAdd($redisKey, 38, 'tom', 98, 'jerry');
$redis->zRemRangeByScore($redisKey, 30, 60);// 移除指定分數區間的成員
print_r($redis->zRange($redisKey, 0, -1));// Array ( [0] => jerry )
echo '<br />';

參考資料:菜鳥教程code

相關文章
相關標籤/搜索