//对Sorted-Sets操作
/**
* Sorted-Sets和Sets类型极为相似,它们都是字符串的集合,都不允许重复的成员出现在一个Set中。
* 它们之间的主要差别是Sorted-Sets中的每一个成员都会有一个分数(score)与之关联,Redis正是通过分数来为集合中的成员进行从小到大的排序。
* 然而需要额外指出的是,尽管Sorted-Sets中的成员必须是唯一的,但是分数(score)却是可以重复的。
* 在Sorted-Set中添加、删除或更新一个成员都是非常快速的操作,其时间复杂度为集合中成员数量的对数。
* 由于Sorted-Sets中的成员在集合中的位置是有序的,因此,即便是访问位于集合中部的成员也仍然是非常高效的。
* @throws Exception
*/
@Test
public void testSorted_Sets() throws Exception {
jedis.flushAll(); //添加一个分数为1的成员
jedis.zadd("myzset", 1, "one"); Map<String,Double> map = new LinkedHashMap<String,Double>();
map.put("two", (double) 2);
map.put("three", (double) 3);
//添加两个分数分别是2和3的两个成员。
jedis.zadd("myzset", map);//这个单独测一下 //0表示第一个成员,-1表示最后一个成员。返回的结果中包含每个成员
Set<String> zrange = jedis.zrange("myzset", 0, -1);
System.out.println("zrange="+zrange);//zrange=[one, two, three] //获取成员one在Sorted-Set中的位置索引值。0表示第一个位置
Long zrank = jedis.zrank("myzset", "one");
System.out.println("zrank = "+zrank);//zrank = 0 //成员four并不存在,因此返回null
System.out.println(jedis.zrank("myzset", "four"));//null //#返回与myzset关联的Sorted-Set中,分数满足表达式1 <= score <= 2的成员的数量。
Long zcount = jedis.zcount("myzset", 1, 2);
System.out.println("zcount="+zcount);//zcount=2 //获取myzset键中成员的数量。
System.out.println(jedis.zcard("myzset"));//3 //删除成员one和two,返回实际删除成员的数量。
Long zrem = jedis.zrem("myzset", "one","two");
System.out.println("zrem="+zrem);//zrem=2 //查看是否删除成功。 获取键中成员的数量
System.out.println(jedis.zcard("myzset"));//1 //获取成员three的分数。返回值是字符串形式。
Double zscore = jedis.zscore("myzset", "three");
System.out.println("zscore="+zscore);//zscore=3.0 //由于成员two已经被删除,所以该命令返回null
System.out.println(jedis.zscore("myzset", "two"));//null //将成员three的分数增加2,并返回该成员更新后的分数。
Double zincrby = jedis.zincrby("myzset", 2, "three");
System.out.println("zincrby="+zincrby);//zincrby=5.0 //将成员three的分数增加-1,并返回该成员更新后的分数。
System.out.println(jedis.zincrby("myzset", -1, "three"));//4.0 //====================》》》》》》
jedis.del("myzset"); Map<String,Double> map3 = new LinkedHashMap<String,Double>();
map3.put("one", 1.0);
map3.put("two", 2.0);
map3.put("three", 3.0);
map3.put("four", 4.0);
//一次添加多个
jedis.zadd("myzset",map3); //获取分数满足表达式1 <= score <= 2的成员。
Set<String> zrangeByScore = jedis.zrangeByScore("myzset", 1, 2);
System.out.println("zrangeByScore= "+zrangeByScore);////zrangeByScore= [one, two] //删除分数满足表达式1 <= score <= 2的成员,并返回实际删除的数量。
Long zremrangeByScore = jedis.zremrangeByScore("myzset", 1, 2);
System.out.println("zremrangeByScore="+zremrangeByScore);//zremrangeByScore=2 //看出一下上面的删除是否成功。
System.out.println(jedis.zrange("myzset", 0, -1));//[three, four] //删除位置索引满足表达式0 <= rank <= 1的成员。返回实际删除的数量
Long zremrangeByRank = jedis.zremrangeByRank("myzset", 0, 1);
System.out.println("zremrangeByRank="+zremrangeByRank);//zremrangeByRank=2 //查看上一条命令是否删除成功。
Long zcard = jedis.zcard("myzset");
System.out.println("zcard = "+zcard);//zcard = 0 //======================>>>>>>>>>>>>>>>>> jedis.del("myzset");
Map<String,Double> map2 = new LinkedHashMap<String,Double>();
map2.put("one", 1.0);
map2.put("two", 2.0);
map2.put("three", 3.0);
map2.put("four", 4.0);
//一次添加多个
jedis.zadd("myzset",map2); //以位置索引从高到低的方式获取并返回此区间内的成员。
Set<String> zrevrange = jedis.zrevrange("myzset", 0, -1);
System.out.println("zrevrange="+zrevrange);//zrevrange=[four, three, two, one] Set<String> zrevrange2 = jedis.zrevrange("myzset", 1, 3);
System.out.println("zrevrange2="+zrevrange2);//zrevrange2=[three, two, one] //由于是从高到低的排序,所以one的位置是3。
System.out.println(jedis.zrevrank("myzset", "one"));//3 //由于是从高到低的排序,所以four的位置是0。
System.out.println(jedis.zrevrank("myzset", "four"));//0 //获取分数满足表达式3 >= score >= 0的成员,并以相反的顺序输出,即从高到底的顺序。
System.out.println(jedis.zrevrangeByScore("myzset", 3, 0));//[three, two, one] System.out.println("数据:="+jedis.zrange("myzset", 0, -1));//数据:=[one, two, three, four] /**
* zrangeByScoreWithScores(String key, double min, double max, int offset, int count)
* key:键
* min:最小分值
* max:最大分值
* offset:偏移量,也就是从哪个位置开始。
* count:元素个数
*
* 返回的元素用ASCII码表示的,该元素的值用double类型数据表示
*/
System.out.println(jedis.zrangeByScoreWithScores("myzset", 2, 3, 0, 2));//[[[116, 119, 111],2.0], [[116, 104, 114, 101, 101],3.0]] }

使用Jedis操作Redis-使用Java语言在客户端操作---对Sorted-Sets的操作的更多相关文章

  1. 使用Jedis操作Redis-使用Java语言在客户端操作---set类型

    原文地址:http://www.cnblogs.com/lixianyuan-org/p/9509696.html 1 //测试set数据类型 2 /** 3 * 在Redis中,我们可以将Set类型 ...

  2. 使用Jedis操作Redis-使用Java语言在客户端操作---hash类型

        我们可以将Redis中的Hashes类型看成具有String Key和String Value的map容器.            所以该类型非常适合于存储值对象的信息.如Username.P ...

  3. 使用Jedis操作Redis-使用Java语言在客户端操作---List类型

    在Redis中,List类型是按照插入顺序排序的字符串链表.和数据结构中的普通链表一样,我们可以在其头部(left)和尾部(right)添加新的元素.在插入时,如果该键并不存在,Redis将为该键创建 ...

  4. 使用Jedis操作Redis-使用Java语言在客户端操作---String类型

    前提:需要引入Jedis的jar包. /** * 我的redis在Linux虚拟机Centos7中,192.168.222.129是我虚拟机的ip地址. */ private static Jedis ...

  5. 使用Jedis操作Redis-使用Java语言在客户端操作---对key的操作

    //添加String类型的模拟数据. jedis.set("mykey", "2"); jedis.set("mykey2", " ...

  6. 使用Java(Jedis)链接redis报java.net.ConnectException: Connection refused: connect的错误

    redis环境:centos6 java代码运行环境:windows 第一种情况:未开启redis服务. redis-server /myredis/redis.conf (写你的redis配置文件的 ...

  7. [java学习笔记]java语言基础概述之数组的定义&常见操作(遍历、排序、查找)&二维数组

    1.数组基础 1.什么是数组:           同一类型数据的集合,就是一个容器. 2.数组的好处:           可以自动为数组中的元素从零开始编号,方便操作这些数据. 3.格式:  (一 ...

  8. 使用jedisPool管理jedis,使用jedis操作redis

    ps:jedis是redis在java中的客户端操作工具 package com.test; 2 3 import java.util.HashMap; 4 import java.util.Iter ...

  9. Jedis测试redis

    首先:Jedis是redis的java版本的客户端. public class JedisTest { //单机版测试Jedis,不使用连接池 @Test public void testJedis( ...

随机推荐

  1. 编译安装redis-3.2.9(latest stable version)

    What is the Redis? Redis is an open source (BSD licensed), in-memory data structure store, used as a ...

  2. HZOI20190816模拟23 mine/water/gcd

    A:mine 只是一个简单的dp....是博主太蒻了... 设f[i][j],表示到第i位,状态是j的方案数,其中$j\in[0,5]$ j==0表示填0,j==1表示填1,且i-1位是雷; j==2 ...

  3. 等差数列+随机数——cf1114E

    先确定上界 然后用查询随机位置的数,求gcd作为公差即可 /* 给定一个size为n的打乱的等差数列 两个询问 ? i 询问第i个数的值 > x 询问大于的值是否存在 可以在30次内问出最大值 ...

  4. 二分+2-sat——hdu3062

    hdu3622升级版 注意要保留两位小数 /* 给定n对圆心(x,y),要求从每对里找到一个点画圆,不可相交 使得最小半径最大 二分答案,设最小半径为r 然后两两配对一次进行判断,在2-sat上连边即 ...

  5. Python3.6爬虫+Djiago2.0+Mysql --数据爬取

    1.下载对应版本的python mysql 模块 我的是:pymssql-2.2.0.dev0-cp36-cp36m-win_amd64.whl 2.手动创建table create table gr ...

  6. 洛谷 P1941 飞扬的小鸟 (NOIP 2014)

    题面 题解 背包细节题,wa了一片,上升的过程我们可以看做一个完全背包(多重背包好像跑不过去),下降 过程是一个0/1背包,为了避免冲突应该先跑多重,先跑0/1就有可能产生这个点又上升又下降的 非法情 ...

  7. Joomla - 模块系统(新建模块、模块类别、自定义模块)

    Joomla - 模块系统,模块配合模板的布局设置.菜单分配.权限分配能创建出一个内容丰富且易于管理的高度自定义前端页面架构 一.新建模块 进入后台,点击顶栏菜单 扩展管理 -> 模块管理 ,进 ...

  8. light oj 1422 区间dp

    #include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> ...

  9. day 38 MySQL之单表查询

    MySQL之单表查询   阅读目录 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER ...

  10. 利用refind实现UEFI多系统引导

    使用DiskGenius Pro给ESP分区指定盘符,目的是为了让ESP分区在硬盘上可见 使用BOOTICE工具中的UEFI选项卡中的功能调整引导顺序 修改启动序列-->EFI NetWork- ...