Redis学习笔记(6)-SortedSet
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的更多相关文章
- Redis学习笔记(二)Redis支持的5种数据类型的总结之String和Hash
引言 在Redis学习笔记(一)中我们已经会安装并且简单使用Redis了,接下来我们一起来学习下Redis支持的5大数据类型. 简介 Redis是REmote DIctionary Server(远程 ...
- Redis学习笔记(二) Redis 数据类型
Redis 支持五种数据类型:string(字符串).list(列表).hash(哈希).set(集合)和 zset(有序集合),接下来我们讲解分别讲解一下这五种类型的的使用. String(字符串) ...
- redis 学习笔记(6)-cluster集群搭建
上次写redis的学习笔记还是2014年,一转眼已经快2年过去了,在段时间里,redis最大的变化之一就是cluster功能的正式发布,以前要搞redis集群,得借助一致性hash来自己搞shardi ...
- Redis学习笔记~目录
回到占占推荐博客索引 百度百科 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合). ...
- Redis学习笔记4-Redis配置详解
在Redis中直接启动redis-server服务时, 采用的是默认的配置文件.采用redis-server xxx.conf 这样的方式可以按照指定的配置文件来运行Redis服务.按照本Redi ...
- Redis学习笔记7--Redis管道(pipeline)
redis是一个cs模式的tcp server,使用和http类似的请求响应协议.一个client可以通过一个socket连接发起多个请求命令.每个请求命令发出后client通常会阻塞并等待redis ...
- Redis学习笔记一:数据结构与对象
1. String(SDS) Redis使用自定义的一种字符串结构SDS来作为字符串的表示. 127.0.0.1:6379> set name liushijie OK 在如上操作中,name( ...
- Redis学习笔记之ABC
Redis学习笔记之ABC Redis命令速查 官方帮助文档 中文版本1 中文版本2(反应速度比较慢) 基本操作 字符串操作 set key value get key 哈希 HMSET user:1 ...
- (转)redis 学习笔记(1)-编译、启动、停止
redis 学习笔记(1)-编译.启动.停止 一.下载.编译 redis是以源码方式发行的,先下载源码,然后在linux下编译 1.1 http://www.redis.io/download 先 ...
随机推荐
- poj 1611 The Suspects 并查集
The Suspects Time Limit: 1000MS Memory Limit: 20000K Total Submissions: 30522 Accepted: 14836 De ...
- A jubeat
Time Limit:1000MS Memory Limit:65535K 题型: 编程题 语言: 无限制 描述 jubeat是一款由日本KONAMI倾心打造的体感音乐游戏,该作在日韩.香港等地 ...
- LIS(nlogn) POJ 3903 Stock Exchange
题目传送门 题意:LIS最长递增子序列 O(nlogn) 分析:设当前最长递增子序列为len,考虑元素a[i]; 若d[len]<a[i],则len++,并使d[len]=a[i]; 否则,在d ...
- Revit二次开发示例:DesignOptions
本例只要演示Revit的类过滤器的用法,在对话框中显示DesignOption元素. #region Namespaces using System; using System.Collections ...
- POJ 3277 City Horizon(扫描线+线段树)
题目链接 类似求面积并..2Y.. #include <cstdio> #include <cstring> #include <string> #include ...
- Mina传递对象
利用Apache MINA来传递对象,这对了MINA来说非常容易,并且这也是Java网络编程中很常用的应用. 首先看两个用来传递的Java对象MyRequestObject和MyResponseObj ...
- PHPUnit在Windows下的配置及使用
由于我们项目涉及到php,因此需要对php代码进行单元测试.经过一番了解,决定用PHPUnit来测试php.PHPUnit花了不少时间摸索如何配置PHPUnit,看官网的文档也是一把泪.但知道怎么配置 ...
- zabbix自定义键值原理
子配置文件的配置 为了便于维护和分类管理,UserParameter的内容可以单独写一个配置文件 # vim /usr/local/zabbix/etc/zabbix_agentd.conf Incl ...
- javascript获取随机rgb颜色和十六进制颜色的方法
<div id="console">在线交易平台的成功秘诀:从 Ebay 到 Yelp 到 Uber</div> <script type=" ...
- PAT 基础编程题 4-11 求自定类型元素序列的中位数(希尔排序)
4-11 求自定类型元素序列的中位数 (25分) 本题要求实现一个函数,求N个集合元素A[]的中位数,即序列中第\lfloor N/2 +1\rfloor⌊N/2+1⌋大的元素.其中集合元素的类型 ...