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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Master_slaves

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值