sorted set操作
Posted 四季常青
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sorted set操作相关的知识,希望对你有一定的参考价值。
Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
1.向有序集合添加一个或多个成员,或者更新已存在成员的分数ZADD key score1 member1 [score2 member2] 向集合zset中放入zs和li的姓名和成绩
2.通过索引区间返回有序集合成指定区间内的成员ZRANGE key start stop [WITHSCORES]
3.获取有序集合的成员数ZCARD key
4.计算在有序集合中指定区间分数的成员数ZCOUNT key min max
如:查询分数在90和100之间的学员个数
5.返回有序集合中指定成员的索引ZRANK key member
6.移除有序集合中的一个或多个成员ZREM key member [member ...]
7.移除有序集合中给定的排名区间的所有成员ZREMRANGEBYRANK key start stop
8.移除有序集合中给定的分数区间的所有成员ZREMRANGEBYSCORE key min max
9.返回有序集中,成员的分数值ZSCORE key member
10.返回有序集中指定区间内的成员,通过索引,分数从高到底ZREVRANGE key start stop [WITHSCORES]
11.返回有序集中指定分数区间内的成员,分数从高到低排序 ZREVRANGEBYSCORE key max min [WITHSCORES]
12.有序集合中对指定成员的分数加上增量 increment ZINCRBY key increment member
sort set 代码操作:
package com.study.util; import java.util.HashMap; import java.util.Map; import java.util.Set; import redis.clients.jedis.Jedis; import redis.clients.jedis.Tuple; public class RedisSortSet { public static void main(String[] args) { Jedis jedis = RedisUtil.getJedis(); //向有序集合zset中添加zs和li的成绩和姓名 //jedis.zadd("zset", 99, "zs"); Map<String, Double> scoreMembers = new HashMap<String,Double>(); scoreMembers.put("zs", 90.0); scoreMembers.put("li", 89.0); jedis.zadd("zset", scoreMembers); //通过索引返回有序集合指定区间的成员 Set<Tuple> scores = jedis.zrangeWithScores("zset", 0, -1); System.out.println("zset的成员:"); for (Tuple tuple : scores) { System.out.println(tuple.getElement()); System.out.println(tuple.getScore()); } //获取有序集合的成员数 long count = jedis.zcard("zset"); System.out.println("集合的个数:" + count); //查询分数在90和100之间的学员个数 count = jedis.zcount("zset", 90, 100); System.out.println("分数在90和100之间的学员个数:" + count); //返回li在集合中的索引 redis是安装score从小到大排序的,所以li在一位 long index = jedis.zrank("zset", "li"); System.out.println("li在集合中的索引:" + index); //移除学员li jedis.zrem("zset", "li"); //根据排名移除集合中的元素 jedis.zremrangeByRank("zset", 0, 2); scoreMembers.put("zs", 80.0); scoreMembers.put("ls", 90.0); scoreMembers.put("ws", 85.0); jedis.zadd("zset", scoreMembers); //根据分数移除集合中的元素 jedis.zremrangeByScore("zset", 80, 85); //返回ls的分值 double score = jedis.zscore("zset", "ls"); System.out.println("ls的分值:" + score); jedis.zadd("zset", 95, "zs"); //通过索引,从高到低返回指定区间的元素 scores = jedis.zrevrangeWithScores("zset", 0, -1); for (Tuple tuple : scores) { System.out.println(tuple.getElement()); System.out.println(tuple.getScore()); } //通过分数,从高到低返回指定区间的元素 scores = jedis.zrevrangeByScoreWithScores("zset", 95, 80); for (Tuple tuple : scores) { System.out.println(tuple.getElement()); System.out.println(tuple.getScore()); } //将ls的分数加10 jedis.zincrby("zset", 10, "li"); scores = jedis.zrangeWithScores("zset", 0, -1); System.out.println("zset的成员:"); for (Tuple tuple : scores) { System.out.println(tuple.getElement()); System.out.println(tuple.getScore()); } jedis.close(); } }
代码git地址:https://gitee.com/sjcq/redis.git
以上是关于sorted set操作的主要内容,如果未能解决你的问题,请参考以下文章
Redis入门到精通——sorted_set基本操作sorted_set扩展操作(实现排行榜功能)sorted_set注意事项sorted_set应用场景(定时任务执行顺序消息任务的权重
Redis入门到精通——sorted_set基本操作sorted_set扩展操作(实现排行榜功能)sorted_set注意事项sorted_set应用场景(定时任务执行顺序消息任务的权重
直接在安装了redis的Linux机器上操作redis数据存储类型--对Sorted-Sets操作