Redis基本数据类型Zset详解

    科技2024-08-01  62

    4.7 ZSet 有序集合

    4.7.1 简介

    本质还是一个集合,在set的基础上加一个score,成为了一个有序集合

    一样的,关于zset的命令都是z开头

    zadd key [NX|XX] [CH] [INCR] score member [score member …]


    4.7.2 添加元素与移除元素方法

    zset add score member

    zrem key member

    ------------------------------------------------------------------------------------------------------------ ##往zet集合中添加member并标识score 127.0.0.1:6379> zadd zset 1 zset1 (integer) 1 ##往zet集合中添加member并标识score 127.0.0.1:6379> zadd zset 2 zset2 (integer) 1 ##往zet集合中添加member并标识score 127.0.0.1:6379> zadd zset 3 zset3 (integer) 1 ------------------------------------------------------------------------------------------------------------ ##使用zrange获取zset范围内的值 127.0.0.1:6379> zrange zset 0 -1 1) "zset1" 2) "zset2" 3) "zset3" ------------------------------------------------------------------------------------------------------------ ##移除zet的member, ##注意这里不能使用score,要移除元素就写元素的要移除的元素 127.0.0.1:6379> zrem zset 1 (integer) 0 ##使用zrange获取zset范围内的值 127.0.0.1:6379> zrange zset 0 -1 1) "zset1" 2) "zset2" 3) "zset3" ##移除zet的member, 127.0.0.1:6379> zrem zset zset1 (integer) 1 ------------------------------------------------------------------------------------------------------------ ##使用zrange获取zset范围内的值 127.0.0.1:6379> zrange zset 0 -1 1) "zset2" 2) "zset3" 127.0.0.1:6379>

    4.7.3 对Zset进行升降序排序

    升序:

    zrangebyscore key min max [WITHSCORES] [LIMIT offset count]

    降序:

    zrevrangebyscore key max min [WITHSCORES] [LIMIT offset count]

    查询所有升序方式:

    zrange key start stop [WITHSCORES]

    查询所有降序方式:

    zrevrange ket start stop [WITHSCORES]


    基于实际场景演示:

    比如现在公司发了工资:所有的工资都存在这个zset中每个人的工资都是不一样的!我们现在要对工资进行排序

    ##往zset中添加成员并附带score 127.0.0.1:6379> zadd salay 5000 xiaohng (integer) 1 ##往zset中添加成员并附带score 127.0.0.1:6379> zadd salay 6000 zhangsan (integer) 1 ##往zset中添加成员并附带score 127.0.0.1:6379> zadd salay 13500 xiaoming (integer) 1 ------------------------------------------------------------------------------------------------------------ ##升序查询 127.0.0.1:6379> zrange salay 0 -1 withscores 1) "xiaohng" 2) "5000" 3) "zhangsan" 4) "6000" 5) "xiaoming" 6) "13500" ##降序查询 127.0.0.1:6379> zrevrange salay 0 -1 withscores 1) "xiaoming" 2) "13500" 3) "zhangsan" 4) "6000" 5) "xiaohng" 6) "5000" ------------------------------------------------------------------------------------------------------------ ##升序查询zset的相关key,并根据score从小到大排序 127.0.0.1:6379> zrangebyscore salay -inf inf 1) "xiaohng" 2) "zhangsan" 3) "xiaoming" ##升序查询zset的相关key,并根据score从小到大排序, ##并附带scores的相关属性输出 127.0.0.1:6379> zrangebyscore salay -inf inf withscores 1) "xiaohng" 2) "5000" 3) "zhangsan" 4) "6000" 5) "xiaoming" 6) "13500" ##升序查询##查询zset的相关key,并根据score从小到7000排序, ##并附带scores的相关属性输出 127.0.0.1:6379> zrangebyscore salay -inf 7000 withscores 1) "xiaohng" 2) "5000" 3) "zhangsan" 4) "6000" ------------------------------------------------------------------------------------------------------------ ##降序查询zet 127.0.0.1:6379> zrevrange salay 0 -1 withscores 1) "xiaoming" 2) "13500" 3) "zhangsan" 4) "6000" 5) "xiaohng" 6) "5000" ##降序查询zet 127.0.0.1:6379> zrevrangebyscore salay +inf -inf withscores 1) "xiaoming" 2) "13500" 3) "zhangsan" 4) "6000" 5) "xiaohng" 6) "5000" ------------------------------------------------------------------------------------------------------------

    4.7.4 查询元素数量&&获取set的区间值

    我们之前怎么查询set元素的现在往前面加一个z就行

    zcard key 查询元素数量

    zcount key min max 获取区间值

    ##查询元素数量 127.0.0.1:6379> zcard salay (integer) 4 ------------------------------------------------------------------------------------------------------------ ##获取范围内的元素 127.0.0.1:6379> zrange salay 0 -1 withscores 1) "wangw" 2) "4" 3) "xiaohng" 4) "5000" 5) "zhangsan" 6) "6000" 7) "xiaoming" 8) "13500" ------------------------------------------------------------------------------------------------------------ ##查询单位内的元素数量 127.0.0.1:6379> zcount salay 4 6000 (integer) 3

    具体命令也可通过查询官网得知 传送门


    4.7.8 实际场景展示

    可存储班级成绩表排序可存储工资表并排序1 普通消息 2 重要消息 带权重执行

    BIBiLiLi的排行榜,每日更新等等

    后面我们要用Java操作redis,Jedis,只不过把对应的命令行方式变为了Java中的一些方法

    Processed: 0.012, SQL: 8