详解)
Redis 里面有一种非常强大的数据结构Sorted Set有序集合简称ZSet这是 Redis 面试和项目里非常高频的东西。一、什么是 Sorted Set先记住一句话Sorted Set 自动排序的 Set它具备Set 的去重 自动排序两个特性。二、为什么需要 Sorted Set普通 Set只能去重 不能排序例如张三 李四 王五但是很多场景需要排名 需要分数 需要排行榜例如用户分数张三100李四80王五120这时候Sorted Set 就非常适合三、Sorted Set 的结构它本质value score例如zhangsan - 100 lisi - 80 wangwu - 120Redis 会根据 score 自动排序四、为什么叫 ZSetRedis 命令Sorted Set前面都带Z例如ZADD ZRANGE ZREM所以很多人直接叫ZSet五、Sorted Set 最大特点1. 自动排序Redis 自动按 score 排序。2. 元素唯一和 Set 一样value 不能重复3. 可以范围查询例如前10名 分数100以上非常适合排行榜。六、Sorted Set 最经典场景1. 游戏排行榜用户 - 分数2. 热搜榜关键词 - 热度3. 点赞排行文章 - 点赞数4. 直播打赏榜用户 - 打赏金额七、核心命令最核心ZADD ZRANGE ZREM ZSCORE八、添加数据ZADDZADD rank100zhangsan意思往 rank 这个有序集合里 添加 zhangsan - 100再添加ZADD rank80lisi ZADD rank120wangwu现在rank: lisi - 80 zhangsan - 100 wangwu - 120Redis 自动排序。九、查看数据ZRANGE从小到大ZRANGE rank0-1输出lisi zhangsan wangwu十、为什么是 0 -1Redis0 第一个 -1 最后一个所以0 -1表示全部数据十一、查看分数ZRANGE rank0-1WITHSCORES输出lisi 80 zhangsan 100 wangwu 120十二、倒序排行榜重点排行榜一般分数高的在前面所以使用ZREVRANGE rank09WITHSCORES意思按分数从大到小 取前10名十三、删除元素ZREM rank lisi删除lisi十四、获取分数ZSCORE rank zhangsan输出100十五、获取排名重点从小到大排名ZRANK rank zhangsan从大到小排名ZREVRANK rank zhangsan排行榜开发里非常常见。十六、Redis 为什么适合排行榜因为Sorted Set 底层跳表 哈希表查询排名速度非常快。十七、Go 操作 Sorted SetGo Redisgithub.com/redis/go-redis/v9十八、添加数据rdb.ZAdd(ctx,rank,redis.Z{Score:100,Member:zhangsan,})十九、再添加rdb.ZAdd(ctx,rank,redis.Z{Score:80,Member:lisi},redis.Z{Score:120,Member:wangwu},)二十、获取排行榜result,_:rdb.ZRevRangeWithScores(ctx,rank,0,9).Result()fmt.Println(result)二十一、返回结果类似[{wangwu 120} {zhangsan 100} {lisi 80}]说明已经自动排序二十二、Sorted Set 底层思想你要理解Sorted Set 本质不是普通数组排序而是Redis 内部维护有序结构所以插入时就已经排序好了二十三、为什么比 MySQL 快如果 MySQL 做排行榜ORDERBYscoreDESC数据量大会很慢。Redis天然维护有序结构所以排行榜场景Redis 非常强。二十四、实际项目案例热搜榜mysql redis go gin热度mysql - 1000 redis - 1500 go - 900存进ZSet然后ZREVRANGE hot09直接获取热搜前10二十五、总结Sorted Set 本质带分数的自动排序集合核心结构member score核心特点自动排序 元素唯一 支持排名 支持范围查询最经典场景排行榜 热搜榜 积分榜 点赞榜核心命令命令作用ZADD添加ZRANGE正序查看ZREVRANGE倒序查看ZREM删除ZSCORE查看分数ZRANK查看排名真实开发只要涉及排行榜 几乎都会想到 Redis Sorted Set