Redis 有序集合(Sorted Set)

命令 描述 语法
ZADD 向有序集合中添加一个或多个成员,或者更新已存在成员的分数 `ZADD key [NX
ZRANGE 通过索引区间返回有序集合指定区间内的成员,按分数从小到大排序 ZRANGE key start stop [WITHSCORES]
- start:起始索引(包含),0 表示第一个成员。
- stop:结束索引(包含), -1 表示最后一个成员。
- WITHSCORES:可选参数,返回结果时包含成员的分数。
ZREVRANGE 通过索引区间返回有序集合指定区间内的成员,按分数从大到小排序 ZREVRANGE key start stop [WITHSCORES]
- start:起始索引(包含),0 表示第一个成员。
- stop:结束索引(包含), -1 表示最后一个成员。
- WITHSCORES:可选参数,返回结果时包含成员的分数。
ZRANGEBYSCORE 返回有序集合中指定分数区间内的成员,按分数从小到大排序 ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
- min:分数下限,可以使用 ( 表示不包含该值。
- max:分数上限,可以使用 ( 表示不包含该值。
- WITHSCORES:可选参数,返回结果时包含成员的分数。
- LIMIT offset count:可选参数,用于分页,offset 表示偏移量,count 表示返回的数量。
ZREVRANGEBYSCORE 返回有序集合中指定分数区间内的成员,按分数从大到小排序 ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]
- max:分数上限,可以使用 ( 表示不包含该值。
- min:分数下限,可以使用 ( 表示不包含该值。
- WITHSCORES:可选参数,返回结果时包含成员的分数。
- LIMIT offset count:可选参数,用于分页,offset 表示偏移量,count 表示返回的数量。
ZRANK 返回有序集合中指定成员的排名(从 0 开始,分数从小到大排序) ZRANK key member
ZREVRANK 返回有序集合中指定成员的排名(从 0 开始,分数从大到小排序) ZREVRANK key member
ZSCORE 返回有序集合中指定成员的分数 ZSCORE key member
ZINCRBY 为有序集合中的成员增加指定的分数 ZINCRBY key increment member
- increment:增加的分数,可以为负数。
ZCARD 获取有序集合的成员数量 ZCARD key
ZCOUNT 计算有序集合中指定分数区间内的成员数量 ZCOUNT key min max
- min:分数下限,可以使用 ( 表示不包含该值。
- max:分数上限,可以使用 ( 表示不包含该值。
ZREM 从有序集合中移除一个或多个成员 ZREM key member1 [member2 ...]
ZREMRANGEBYRANK 移除有序集合中指定排名区间内的所有成员 ZREMRANGEBYRANK key start stop
- start:起始排名(包含),0 表示第一个成员。
- stop:结束排名(包含)。
ZREMRANGEBYSCORE 移除有序集合中指定分数区间内的所有成员 ZREMRANGEBYSCORE key min max
- min:分数下限,可以使用 ( 表示不包含该值。
- max:分数上限,可以使用 ( 表示不包含该值。

场景示例

1. 排行榜

以游戏玩家的积分排行榜为例,玩家 ID 作为成员,积分作为分数。

更新玩家积分(Java 代码示例)

import redis.clients.jedis.Jedis;

public class PlayerScoreUpdater {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("localhost");
        String leaderboardKey = "game:leaderboard";
        String playerId = "player:123";
        double newScore = 1500;

        // 添加或更新玩家的积分
        jedis.zadd(leaderboardKey, newScore, playerId);
        System.out.println("玩家 " + playerId + " 的积分更新为 " + newScore);

        jedis.close();
    }
}

获取排行榜前 10 名(Java 代码示例)

import redis.clients.jedis.Jedis;
import java.util.Set;

public class LeaderboardFetcher {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("localhost");
        String leaderboardKey = "game:leaderboard";

        // 获取排行榜前 10 名(按分数从高到低)
        Set<String> top10Players = jedis.zrevrange(leaderboardKey, 0, 9);
        System.out.println("排行榜前 10 名: " + top10Players);

        jedis.close();
    }
}

获取玩家排名(Java 代码示例)

import redis.clients.jedis.Jedis;

public class PlayerRankFetcher {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("localhost");
        String leaderboardKey = "game:leaderboard";
        String playerId = "player:123";

        // 获取玩家的排名(按分数从高到低)
        Long rank = jedis.zrevrank(leaderboardKey, playerId);
        if (rank != null) {
            System.out.println("玩家 " + playerId + " 的排名是 " + (rank + 1));
        } else {
            System.out.println("玩家 " + playerId + " 不在排行榜中");
        }

        jedis.close();
    }
}

2. 热门列表

假设我们要维护一个文章热门列表,根据文章的阅读量作为分数来排序。

更新文章阅读量(Java 代码示例)

import redis.clients.jedis.Jedis;

public class ArticleViewUpdater {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("localhost");
        String popularArticlesKey = "article:popular";
        String articleId = "article:456";
        double viewIncrement = 10;

        // 增加文章的阅读量(假设每次有 10 次新阅读)
        jedis.zincrby(popularArticlesKey, viewIncrement, articleId);
        System.out.println("文章 " + articleId + " 的阅读量增加了 " + viewIncrement);

        jedis.close();
    }
}

获取热门文章列表(Java 代码示例)

import redis.clients.jedis.Jedis;
import java.util.Set;

public class PopularArticleFetcher {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("localhost");
        String popularArticlesKey = "article:popular";

        // 获取阅读量超过 1000 的热门文章(按阅读量从高到低)
        Set<String> popularArticles = jedis.zrevrangeByScore(popularArticlesKey, "+inf", "1000");
        System.out.println("热门文章列表: " + popularArticles);

        jedis.close();
    }
}
#我的2024牛客高光时刻##牛客创作赏金赛#
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务