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. win7下loadrunner创建mysql数据库参数化问题解决

    问题现象: 安装mysql数据源驱动后,lr创建mysql驱动程序列表没有安装的驱动程序: 安装完mysql ODBC数据源后 2.在控制面板-数据源(ODBC) 3.创建mysql数据源: 4.从l ...

  2. js:语言精髓笔记5----语言分类

    计算模型:源于对计算过程的不同认识: 1.基于不同计算模型一般分为://教科书的一般分类 命令式语言: 函数式语言: 逻辑式语言: 面向对象程序设计语言: 2.基于程序本质分类:  //编程的经典法则 ...

  3. BZOJ2216 : [Poi2011]Lightning Conductor

    $f[i]=\max(a[j]+\lceil\sqrt{|i-j|}\rceil)$, 拆开绝对值,考虑j<i,则决策具有单调性,j>i同理, 所以可以用分治$O(n\log n)$解决. ...

  4. Javascript中call的使用

    Javascript中call的使用自己感觉蛮纠结的,根据文档很好理解,其实很难确定你是否真正的理解. call 方法应用于:Function 对象调用一个对象的一个方法,以另一个对象替换当前对象.c ...

  5. 百度搜索词&淘宝搜索词 接口实现

    百度和淘宝并没有正式的提供一个公开API给我们用,但是经过分析他们的源代码,还是找到了解决方法. 1 2 3 4 5 6 7 8 9 /*baidu&taobao callback*/ fun ...

  6. 【BZOJ】1069: [SCOI2007]最大土地面积(凸包+旋转卡壳)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1069 显然这四个点在凸包上,然后枚举两个点找上下最大的三角形即可. 找三角形表示只想到三分QAQ.. ...

  7. 【BZOJ】3781: 小B的询问(莫队算法)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3781 还能不能再裸点.. #include <cstdio> #include < ...

  8. 【BZOJ】1270: [BeijingWc2008]雷涛的小猫(DP+水题)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1270 这完全是一眼题啊,但是n^2的时间挺感人.(n^2一下的级别请大神们赐教,我还没学多少dp优化 ...

  9. COJ983 WZJ的数据结构(负十七)

    显然是动态树裸题:O(mlogn) #include<cstdio> #include<cstring> #include<algorithm> #include& ...

  10. Redis中7种集合类型应用场景

    StringsStrings 数据结构是简单的key-value类型,value其实不仅是String,也可以是数字.使用Strings类型,你可以完全实现目前 Memcached 的功能,并且效率更 ...