redis 命令列操作sort set 和java方式操作
阿新 • • 發佈:2018-12-13
Redis (sorted set)有序集合和集合一樣也是string型別元素的集合,且不允許重複的成員。
不同的是每個元素都會關聯一個double型別的分數。redis正是通過分數來為集合中的成員進行從小到大的排序。
有序集合的成員是唯一的,但分數(score)卻可以重複。
集合是通過雜湊表實現的,所以新增,刪除,查詢的複雜度都是O(1)。 集合中最大的成員數為 232 - 1 (4294967295, 每個集合可儲存40多億個成員)。
zadd key [NX|XX] [CH] [INCR] score member [score member ...] 向集合中增加元素 ZRANGE key start stop [WITHSCORES] 查詢集合中的元素 zrem key member [member ...] 移除集合中的某元素 ZCARD key 計算集合中元素的個數 zcount key min max 計算指定分數區間中元素的個數 ZINCRBY key increment member 對指定元素對應的score加上增量 ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight] 計算一個或多個有序集合的交集並存入新的集合 ZSCORE key member 返回結合中指定元素的分數值 ZREVRANGE key start stop [WITHSCORES] 有序集合降序排列 ZREMRANGEBYRANK key start stop 根據排名刪除元素 ZREMRANGEBYSCORE key min max 根據分數範圍刪除元素 ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] 根據評分範圍查詢元素
1 增加元素 查詢元素 排序
127.0.0.1:6379> zadd set 7 zhangsan 1 lisi 10 wangwu
(integer) 3
127.0.0.1:6379> ZRANGE set 0 -1
1) "lisi"
2) "zhangsan"
3) "wangwu"
127.0.0.1:6379> ZRANGE set 0 -1 withscores
1) "lisi"
2) "1"
3) "zhangsan"
4) "7"
5) "wangwu"
6) "10"
127.0.0.1:6379>
2 移除某個元素
127.0.0.1:6379> ZREM set zhangsan (integer) 1 127.0.0.1:6379> ZRANGE set 0 -1 1) "lisi" 2) "wangwu" 127.0.0.1:6379>
3 計算元素在指定分數區間的個數
127.0.0.1:6379> ZCOUNT set 1 10
(integer) 2
127.0.0.1:6379> ZCOUNT set 1 2
(integer) 1
127.0.0.1:6379>
4 計算集合中元素個數
127.0.0.1:6379> ZCARD set
(integer) 2
127.0.0.1:6379>
5 對指定元素的score加上一個增量
127.0.0.1:6379> ZINCRBY set 20 lisi "21" 127.0.0.1:6379> zrange set 0 -1 withscores 1) "wangwu" 2) "10" 3) "lisi" 4) "21" 127.0.0.1:6379>
6 計算兩個有序集合的交集並賦值
127.0.0.1:6379> ZINTERSTORE set5 2 set set4
(integer) 0
127.0.0.1:6379> zadd set4 10 zhangsan 11 lisi 1 wangmaz
(integer) 3
127.0.0.1:6379> ZINTERSTORE set5 2 set set4
(integer) 1
127.0.0.1:6379> ZRANGE set5 0 -1
1) "lisi"
127.0.0.1:6379>
7 返回指定元素的分數值
127.0.0.1:6379> ZSCORE set zhangsan
(nil)
127.0.0.1:6379> ZSCORE set lisi
"21"
127.0.0.1:6379>
8 降序排列
127.0.0.1:6379> ZREVRANGE set 0 -1 withscores
1) "lisi"
2) "21"
3) "wangwu"
4) "10"
9 根據排名刪除元素 刪除第一名
127.0.0.1:6379> ZREMRANGEBYRANK set 0 0
(integer) 1
127.0.0.1:6379> zrange set 0 -1
1) "lisi"
127.0.0.1:6379>
10 根據分數範圍刪除元素
127.0.0.1:6379> ZREMRANGEBYSCORE set5 0 100
(integer) 1
127.0.0.1:6379> zrange set5 0 -1
(empty list or set)
127.0.0.1:6379>
11 根據評分範圍查詢元素
127.0.0.1:6379> ZRANGEBYSCORE set 0 100 withscores limit 0 1
1) "lisi"
2) "21"
127.0.0.1:6379>
二 java方式操作
package redisUtils;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.junit.Test;
import redis.clients.jedis.Jedis;
public class RedisSortSet {
@Test
public void template(){// 模板
Jedis jedis = RedisUtils.getJedis();
jedis.close();
RedisUtils.close();
}
/**
* zadd
* zrange
* zrangebyscore
* @Description: TODO(用一句話描述該檔案做什麼)
* @author guochao
* @date 2018年10月3日
*
*/
@Test
public void zadd(){// 模板
Jedis jedis = RedisUtils.getJedis();
jedis.zadd("test", 1, "zhangsan");
jedis.zadd("test", 12, "lisi");
jedis.zadd("test", 13, "wanmazi");
jedis.zadd("test", 14, "wuhan");
Map<String,Double> map = new HashMap<String,Double>();
map.put("shenzhen", new Double(4));
map.put("guangzhou", new Double(3));
map.put("河南", new Double(40));
map.put("wuhu", new Double(100));
jedis.zadd("test", map);
Set<String> zrange = jedis.zrange("test", 0, -1);
//[zhangsan, guangzhou, shenzhen, lisi, wanmazi, wuhan, 河南, wuhu]
System.out.println(zrange);
Set<String> zrangeByScore = jedis.zrangeByScore("test", 0, 10);// 查詢0 到 10分的
System.out.println("0-10:"+zrangeByScore);
//0-10:[zhangsan, guangzhou, shenzhen]
jedis.close();
RedisUtils.close();
}
@Test
public void query(){
Jedis jedis = RedisUtils.getJedis();
Long zcard = jedis.zcard("test");
System.out.println("結合中的個數"+zcard);
Long zcount = jedis.zcount("test", 0, 5);// 0 到 5
System.out.println("分數在0-5的個數"+zcount);
Double zscore = jedis.zscore("test", "河南");
System.out.println("河南對應的score值"+zscore);
/**
* 結合中的個數8
分數在0-5的個數3
河南對應的score值40.0
*/
jedis.close();
RedisUtils.close();
}
@Test
public void zrem(){
Jedis jedis = RedisUtils.getJedis();
Long zrem = jedis.zrem("test", "河南");
Long zremrangeByScore = jedis.zremrangeByScore("test", 0, 20);
System.out.println("zrem"+zrem);
System.out.println("zremrangeByScore"+zremrangeByScore);
}
}