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; importView Codejava.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操作