1. 程式人生 > >redis 命令列操作sort set 和java方式操作

redis 命令列操作sort set 和java方式操作

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);
	}
}