package cn.com;

import java.util.HashMap;
import java.util.Map;
import java.util.Set; import redis.clients.jedis.Jedis;
import redis.clients.jedis.Tuple; /**
* 有序集合的所有操作方法
*
* */
public class Redis_SortedSet { public static Jedis redis = new Jedis("localhost", 6379);// 连接redis /**
* ZADD key score member [[score member] [score member] ...]
* 将一个或多个 member 元素及其 score 值加入到有序集 key 当中。
* 如果某个 member 已经是有序集的成员,那么更新这个 member 的 score 值,并通过重新插入这个 member 元素,来保证该 member 在正确的位置上。
* score 值可以是整数值或双精度浮点数。
* 如果 key 不存在,则创建一个空的有序集并执行 ZADD 操作。
* 当 key 存在但不是有序集类型时,返回一个错误。
* */
public static void zadd(){
redis.flushDB();//清除数据
Map<String,Double> agemap=new HashMap<String,Double>();
agemap.put("age1", 1.0);
agemap.put("age2", 2.0);
agemap.put("age4", 4.0);
agemap.put("age3", 3.0);
agemap.put("age9", 9.0);
agemap.put("age5", 5.0);
redis.zadd("user", agemap);
Set<String> list=redis.zrange("user", 0, -1);
for(String s:list){
System.out.println(s);
} } /**
* 返回有序集 key 的基数。
* */
public static void zcard(){
redis.flushDB();//清除数据
Map<String,Double> agemap=new HashMap<String,Double>();
agemap.put("age1", 1.0);
agemap.put("age2", 2.0);
agemap.put("age4", 4.0);
agemap.put("age3", 3.0);
agemap.put("age9", 9.0);
agemap.put("age5", 5.0);
redis.zadd("user", agemap);
Long length=redis.zcard("user");
System.out.println(length);
} /**
* ZCOUNT key min max
* 返回有序集 key 中, score 值在 min 和 max 之间(默认包括 score 值等于 min 或 max )的成员的数量。
* */
public static void zcount(){
redis.flushDB();//清除数据
Map<String,Double> agemap=new HashMap<String,Double>();
agemap.put("age1", 1.0);
agemap.put("age2", 2.0);
agemap.put("age4", 4.0);
agemap.put("age3", 3.0);
agemap.put("age9", 9.0);
agemap.put("age5", 5.0);
redis.zadd("user", agemap);
Long number=redis.zcount("user", 5,9);
System.out.println(number); } /**
* ZINCRBY key increment member
*为有序集 key 的成员 member 的 score 值加上增量 increment 。
*可以通过传递一个负数值 increment ,让 score 减去相应的值,比如 ZINCRBY key -5 member ,就是让 member 的 score 值减去 5 。
*当 key 不存在,或 member 不是 key 的成员时, ZINCRBY key increment member 等同于 ZADD key increment member 。
*当 key 不是有序集类型时,返回一个错误。
*score 值可以是整数值或双精度浮点数
* */
public static void zincrby(){
redis.flushDB();//清除数据
Map<String,Double> agemap=new HashMap<String,Double>();
agemap.put("age1", 1.0);
agemap.put("age2", 2.0);
agemap.put("age4", 4.0);
agemap.put("age3", 3.0);
agemap.put("age9", 9.0);
agemap.put("age5", 5.0);
redis.zadd("user", agemap);
redis.zincrby("user", 55,"age5");
Set<String> list=redis.zrange("user", 0, -1);
for(String s:list){
System.out.println(s);
}
} /**
* ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]
* 计算给定的一个或多个有序集的交集,其中给定 key 的数量必须以 numkeys 参数指定,并将该交集(结果集)储存到 destination 。
* 默认情况下,结果集中某个成员的 score 值是所有给定集下该成员 score 值之和.
* */
public static void zinterstore(){
redis.flushDB();//清除数据 redis.zadd("user", 1, "age1");
redis.zadd("user", 3, "age3");
redis.zadd("user", 6, "age6");
redis.zadd("user", 2, "age2");
redis.zadd("user", 8, "age8"); redis.zadd("user1", 11, "age1");
redis.zadd("user1", 33, "age3");
redis.zadd("user1", 66, "age6");
redis.zadd("user1", 22, "age2");
redis.zadd("user1", 88, "age8");
redis.zadd("user1", 99, "age9"); redis.zinterstore("newset",new String[]{"user","user1"}); Set<String> list=redis.zrange("newset", 0, -1);
for(String s:list){
System.out.println(s);
}
} /**
* 返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )的成员。有序集成员按 score 值递增(从小到大)次序排列。
* 可选的 LIMIT 参数指定返回结果的数量及区间(就像SQL中的 SELECT LIMIT offset, count ),注意当 offset 很大时,定位 offset 的操作可能需要遍历整个有序集,此过程最坏复杂度为 O(N) 时间。
* 可选的 WITHSCORES 参数决定结果集是单单返回有序集的成员,还是将有序集成员及其 score 值一起返回。
* */
public static void zrangeByScore(){
redis.flushDB();//清除数据
redis.zadd("user", 1, "age1");redis.zadd("user", 11, "age11");redis.zadd("user", 111, "age111");
redis.zadd("user", 3, "age3");redis.zadd("user", 33, "age33");redis.zadd("user", 333, "age333");
redis.zadd("user", 6, "age6");redis.zadd("user", 66, "age6");redis.zadd("user", 666, "age666");
redis.zadd("user", 2, "age2");redis.zadd("user", 22, "age22");redis.zadd("user", 222, "age222");
redis.zadd("user", 8, "age8");redis.zadd("user", 9, "age9");redis.zadd("user", 9, "age9");
Set<String> list=redis.zrangeByScore("user", 100, 700);
for(String s:list){
System.out.println(s);
}
} /**
* ZRANK key member
* 返回有序集 key 中成员 member 的排名。其中有序集成员按 score 值递增(从小到大)顺序排列。
* 排名以 0 为底,也就是说, score 值最小的成员排名为 0 。
* */
public static void rand(){
redis.flushDB();
redis.zadd("user", 1, "age1");redis.zadd("user", 11, "age11");redis.zadd("user", 111, "age111");
long number=redis.zrank("user", "age11");
//number 显示的位1 低名是从0 开始 age11 排名为第一
System.out.println(number);
} /**
* ZREM key member [member ...]
* 移除有序集 key 中的一个或多个成员,不存在的成员将被忽略。
* 当 key 存在但不是有序集类型时,返回一个错误
* */
public static void zrem(){
redis.flushDB();
redis.zadd("user", 1, "age1");
redis.zadd("user", 2, "age2");
redis.zadd("user", 3, "age3");
redis.zadd("user", 4, "age4");
redis.zadd("user", 5, "age5");
redis.zrem("user", "age2","age5");
Set<String> list=redis.zrange("user",0,-1);
for(String s:list){
System.out.println(s);
}
} /**
* 取排名在stat -end 之间的Tuple (strt 和end 指的指的是在集合中的排名 并非是score)
* Tuple 包含key 和 score
* */
public static void zrangeWithScores(){
redis.flushDB();
redis.zadd("user", 11, "age1");
redis.zadd("user", 22, "age2");
redis.zadd("user", 33, "age3");
redis.zadd("user", 44, "age4");
redis.zadd("user", 55, "age5");
Set<Tuple> list= redis.zrangeWithScores("user", 0, 2);
for(Tuple s:list){
System.out.println(s.getElement()+" store:"+s.getScore()); }
} /**
* 取排名在stat -end 之间的Tuple (strt 和end 指的是存储的score )
* Tuple 包含key 和 score
* */
public static void zrangeByScoreWithScores(){
redis.flushDB();
redis.zadd("user", 11, "age1");
redis.zadd("user", 22, "age2");
redis.zadd("user", 33, "age3");
redis.zadd("user", 44, "age4");
redis.zadd("user", 55, "age5");
Set<Tuple> list=redis.zrangeByScoreWithScores("user", 0, 35);
for(Tuple s:list){
System.out.println(s.getElement()+" store:"+s.getScore()); }
} /**
* 删除 排序号在 strt-end 之间的元素
* */
public static void zremrangeByRank(){
redis.flushDB();
redis.zadd("user", 11, "age1");
redis.zadd("user", 22, "age2");
redis.zadd("user", 333, "age33");
redis.zadd("user", 44, "age4");
redis.zadd("user", 55, "age5");
redis.zadd("user", 66, "age6");
redis.zadd("user", 77, "age7");
redis.zremrangeByRank("user", 0, 3);
Set<String> list=redis.zrange("user", 0, -1);
for(String s:list){
System.out.println(s);
}
} /**
* 倒序排列集合
* @param key (max最大score) (min 最小score)
* */
public static void zrevrangeByScore(){
redis.flushDB();
redis.zadd("user", 11, "age1");
redis.zadd("user", 22, "age2");
redis.zadd("user", 333, "age33");
redis.zadd("user", 44, "age4");
redis.zadd("user", 55, "age5");
Set<String> list=redis.zrevrangeByScore("user", 55, 0); for(String s:list){
System.out.println(s);
}
} /**
* 倒序取score 范围 max-min 之间的元素
* */
public static void zrevrangeByScoreWithScores(){
redis.flushDB();
redis.zadd("user", 11, "age1");
redis.zadd("user", 22, "age2");
redis.zadd("user", 333, "age33");
redis.zadd("user", 44, "age4");
redis.zadd("user", 55, "age5");
redis.zadd("user", 66, "age6");
redis.zadd("user", 77, "age7");
Set<Tuple> list= redis.zrevrangeByScoreWithScores("user", 66, 22);
for(Tuple s:list){
System.out.println(s.getElement()+" store:"+s.getScore());
}
} /**
* 倒序排列集合
* @param key star-end 取排序范围
* */
public static void zrevrangeWithScores(){
redis.flushDB();
redis.zadd("user", 11, "age1");
redis.zadd("user", 22, "age2");
redis.zadd("user", 333, "age33");
redis.zadd("user", 44, "age4");
redis.zadd("user", 55, "age5");
Set<Tuple> list=redis.zrevrangeWithScores("user", 0, 3); for(Tuple s:list){
System.out.println(s.getElement()+" score:"+s.getScore());
}
} /**
* 删除 key 在 score的值在star-end 之间的值
* */
public static void zremrangeByScore(){
redis.flushDB();
redis.zadd("user", 11, "age1");
redis.zadd("user", 22, "age2");
redis.zadd("user", 33, "age3");
redis.zadd("user", 44, "age4");
redis.zadd("user", 55, "age5");
redis.zremrangeByScore("user", 0, 22);
Set<String> list=redis.zrange("user", 0, -1);
for(String s:list){
System.out.println(s);
}
} /**
* 返回 key 中member 中的排名值
* */
public static void zrevrank(){
redis.flushDB();
redis.zadd("user", 11, "age1");
redis.zadd("user", 22, "age2");
redis.zadd("user", 33, "age3");
redis.zadd("user", 44, "age4");
redis.zadd("user", 55, "age5");
long l=redis.zrevrank("user", "age3"); System.out.println(l); } /**
* 返回有序集 key 中,指定区间内的成员。
* 其中成员的位置按 score 值递增(从小到大)来排序。
* 具有相同 score 值的成员按字典序(lexicographical order )来排列。
* */
public static void zrange(){
redis.flushDB();//清除数据
Map<String,Double> agemap=new HashMap<String,Double>();
agemap.put("age1", 1.0);
agemap.put("age2", 2.0);
agemap.put("age4", 4.0);
agemap.put("age3", 3.0);
agemap.put("age9", 9.0);
agemap.put("age5", 5.0);
redis.zadd("user", agemap);
redis.zincrby("user", 55,"age5");
Set<String> list=redis.zrange("user", 0, -1);
for(String s:list){
System.out.println(s);
} } /**
* 求两个集合的并集
* */
public static void zunionstore(){
redis.flushDB();//清除数据
redis.zadd("user", 1, "age1");
redis.zadd("user", 3, "age3");
redis.zadd("user", 6, "age6");
redis.zadd("user", 2, "age2");
redis.zadd("user", 10, "age10"); redis.zadd("user1", 11, "age1");
redis.zadd("user1", 33, "age3");
redis.zadd("user1", 66, "age6");
redis.zadd("user1", 22, "age2");
redis.zadd("user1", 88, "age8");
redis.zadd("user1", 99, "age9"); redis.zunionstore("newset",new String[]{"user","user1"});
Set<String> list=redis.zrange("newset", 0, -1);
for(String s:list){
System.out.println(s);
}
} public static void main(String [] args){
zrevrangeByScoreWithScores();
}
}

  

Redis学习笔记(6)-SortedSet的更多相关文章

  1. Redis学习笔记(二)Redis支持的5种数据类型的总结之String和Hash

    引言 在Redis学习笔记(一)中我们已经会安装并且简单使用Redis了,接下来我们一起来学习下Redis支持的5大数据类型. 简介 Redis是REmote DIctionary Server(远程 ...

  2. Redis学习笔记(二) Redis 数据类型

    Redis 支持五种数据类型:string(字符串).list(列表).hash(哈希).set(集合)和 zset(有序集合),接下来我们讲解分别讲解一下这五种类型的的使用. String(字符串) ...

  3. redis 学习笔记(6)-cluster集群搭建

    上次写redis的学习笔记还是2014年,一转眼已经快2年过去了,在段时间里,redis最大的变化之一就是cluster功能的正式发布,以前要搞redis集群,得借助一致性hash来自己搞shardi ...

  4. Redis学习笔记~目录

    回到占占推荐博客索引 百度百科 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合). ...

  5. Redis学习笔记4-Redis配置详解

    在Redis中直接启动redis-server服务时, 采用的是默认的配置文件.采用redis-server   xxx.conf 这样的方式可以按照指定的配置文件来运行Redis服务.按照本Redi ...

  6. Redis学习笔记7--Redis管道(pipeline)

    redis是一个cs模式的tcp server,使用和http类似的请求响应协议.一个client可以通过一个socket连接发起多个请求命令.每个请求命令发出后client通常会阻塞并等待redis ...

  7. Redis学习笔记一:数据结构与对象

    1. String(SDS) Redis使用自定义的一种字符串结构SDS来作为字符串的表示. 127.0.0.1:6379> set name liushijie OK 在如上操作中,name( ...

  8. Redis学习笔记之ABC

    Redis学习笔记之ABC Redis命令速查 官方帮助文档 中文版本1 中文版本2(反应速度比较慢) 基本操作 字符串操作 set key value get key 哈希 HMSET user:1 ...

  9. (转)redis 学习笔记(1)-编译、启动、停止

    redis 学习笔记(1)-编译.启动.停止   一.下载.编译 redis是以源码方式发行的,先下载源码,然后在linux下编译 1.1 http://www.redis.io/download 先 ...

随机推荐

  1. DFS(剪枝) POJ 1011 Sticks

    题目传送门 /* 题意:若干小木棍,是由多条相同长度的长木棍分割而成,问最小的原来长木棍的长度: DFS剪枝:剪枝搜索的好题!TLE好几次,终于剪枝完全! 剪枝主要在4和5:4 相同长度的木棍不再搜索 ...

  2. BZOJ1508 : [NOI2003]Game

    a[i][j]:i移动一根变成j是否可能 b[i][j]:i增加一根变成j是否可能 枚举在一个数字中移动的情况以及在两个数字中移动的情况 #include<cstdio> #include ...

  3. 【POJ】1228 Grandpa's Estate(凸包)

    http://poj.org/problem?id=1228 随便看看就能发现,凸包上的每条边必须满足,有相邻的边和它斜率相同(即共线或凸包上每个点必须一定在三点共线上) 然后愉快敲完凸包+斜率判定, ...

  4. BZOJ4009: [HNOI2015]接水果

    4009: [HNOI2015]接水果 Description 风见幽香非常喜欢玩一个叫做 osu!的游戏,其中她最喜欢玩的模式就是接水果. 由于她已经DT FC 了The big black,  她 ...

  5. FlyCapture2 Qt5 MinGW Configuration

    Install FlyCatprue2 to the folder "C:\PointGreyResearch\" Add the following to the .pro fi ...

  6. Qt resizeEvent 控件居中设置

    在Qt中我们有时需要让一个控件在窗口居中或是在父控件中居中,而且在窗口拉伸时仍然保持正中央的位置.这里介绍一种方法,用到了主窗口的响应函数resizeEvent(QResizeEvent* event ...

  7. sftp配置

    sftp不需要安装,只需要借助sshd服务器即可使用. 增加用户useradd -s /bin/false mysftp 设置用户密码passwd mysftp 创建用户家目录mkdir /home/ ...

  8. 使用SEP禁止客户端修改IP地址 - 飞舞的菜刀 - 51CTO技术博客

    1.首先从注册表中搜寻 IP地址所在的位置,查到几项,此项即可: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Paramete ...

  9. php运行模式的比较(转)

    PHP运行模式有4钟:1)cgi 通用网关接口(Common Gateway Interface))2) fast-cgi 常驻 (long-live) 型的 CGI3) cli  命令行运行   ( ...

  10. Jenkins学习记录

    参考资料 官方文档 用MSBuild和Jenkins搭建持续集成环境(1) 用MSBuild和Jenkins搭建持续集成环境(2) 构建基于Jenkins + Github的持续集成环境 Jenkin ...