1. 程式人生 > >java 操作Redis Set 命令 例項(Jedis) (五)

java 操作Redis Set 命令 例項(Jedis) (五)

直接上哎

package com.jjf.redis;

import org.junit.Assert;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Pipeline;
import redis.clients.jedis.ScanResult;

import java.util.List;
import java.util.Set;

/**
 * Created by jjf_lenovo on 2017/3/31.
 */
public class RedisSetTest {
    Jedis jedis = null;
    static final String DATASOURCE_URL = "182.254.213.106";
    static final int DATASOURCE_SORT = 6379;
    static final String DATASOURCE_PASS = "123456";
    static final int DATASOURCE_SELECT = 1;
    public RedisSetTest(){
        //基本配置
        jedis = new Jedis(DATASOURCE_URL,DATASOURCE_SORT);
        jedis.auth(DATASOURCE_PASS);
        jedis.select(DATASOURCE_SELECT);
    }

    @Test
    public void testSAdd(){
        //sadd 將一個或多個 member 元素加入到集合 key 當中,已經存在於集合的 member 元素將被忽略。
        Assert.assertTrue(jedis.sadd("set","a")==1);
        Assert.assertTrue(jedis.sadd("set","a","b","c")==2);
        Assert.assertTrue(jedis.del("set")==1);
    }

    @Test
    public void testSCard(){
        //scard 返回集合 key 的基數(集合中元素的數量)。
        Assert.assertTrue(jedis.sadd("set","a","b","c")==3);
        Assert.assertTrue(jedis.scard("set".getBytes())==3);
        Assert.assertTrue(jedis.del("set")==1);
    }

    @Test
    public void testSDiff(){
        //sdiff 返回一個集合的全部成員,該集合是所有給定集合之間的差集。
        Assert.assertTrue(jedis.sadd("set","a","b","c")==3);
        Assert.assertTrue(jedis.sadd("SET","A","B","C","a","b","c")==6);
        Set<String> a = jedis.sdiff("set","SET");//是找出set中,SET沒有的元素,多級的話,一個個比
        Set<String> b = jedis.sdiff("SET","set");//是找出SET中,set沒有的元素,多級的話,一個個比
        System.out.println(a.toString()+":::"+b.toString());
        Assert.assertTrue(jedis.del("set","SET")==2);
    }

    @Test
    public void testSDiffStore(){
        //sdiffstore 這個命令的作用和 SDIFF 類似,但它將結果儲存到 destination 集合,而不是簡單地返回結果集。
        Assert.assertTrue(jedis.sadd("set","a","b","c")==3);
        Assert.assertTrue(jedis.sadd("SET","A","B","C","a","b","c")==6);
        Assert.assertTrue(jedis.sdiffstore("store","SET","set")==3);
        Assert.assertTrue(jedis.sdiffstore("store","set","SET")==0);
        Assert.assertTrue(jedis.del("set","SET")==2);
    }

    @Test
    public void testSInter(){
        //sinter 返回一個集合的全部成員,該集合是所有給定集合的交集。
        Assert.assertTrue(jedis.sadd("set","a","b","c")==3);
        Assert.assertTrue(jedis.sadd("SET","A","B","C","a","b","c")==6);
        Set<String> set = jedis.sinter("set","SET");
        System.out.println(set.toString());
        Assert.assertTrue(set.size()==3);
        Assert.assertTrue(jedis.del("set","SET")==2);
    }

    @Test
    public void testSInterStore(){
        //sinterstore 這個命令類似於 SINTER 命令,但它將結果儲存到 destination 集合,而不是簡單地返回結果集。
        Assert.assertTrue(jedis.sadd("set","a","b","c")==3);
        Assert.assertTrue(jedis.sadd("SET","A","B","C","a","b","c")==6);
        Assert.assertTrue(jedis.sinterstore("store","set","SET")==3);
        Assert.assertTrue(jedis.del("set","SET","store")==3);
    }

    @Test
    public void testSIsMember(){
        //sismember 判斷 member 元素是否集合 key 的成員。
        Assert.assertTrue(jedis.sadd("set","a","b","c")==3);
        Assert.assertTrue(jedis.sismember("set","b"));
        Assert.assertTrue(jedis.del("set")==1);
    }

    @Test
    public void testSMembers(){
        //smembers 返回集合 key 中的所有成員。 不存在的 key 被視為空集合。
        Assert.assertTrue(jedis.sadd("set","a","b","c")==3);
        Set<String> set = jedis.smembers("set");
        System.out.println(set.toString());
        Assert.assertTrue(set.size()==3);
        Assert.assertTrue(jedis.del("set")==1);
    }

    @Test
    public void testSMove(){
        //將 member 元素從 source 集合移動到 destination 集合。 (原子操作)
        Assert.assertTrue(jedis.sadd("set","a","b","c")==3);
        Assert.assertTrue(jedis.sadd("SET","A","B","C","a","b","c")==6);
        Assert.assertTrue(jedis.smove("set","SET","a")==1);
        Set<String> a = jedis.smembers("set");
        Set<String> b = jedis.smembers("SET");
        System.out.println(a.toString());
        System.out.println(b.toString());
        Assert.assertTrue(a.size()==2);
        Assert.assertTrue(b.size()==6);//因為原本就存在a ,所以還是6個
        Assert.assertTrue(jedis.del("set","SET")==2);
    }

    @Test
    public void testSPop(){
        //spop 移除並返回集合中的一個隨機元素。
        Assert.assertTrue(jedis.sadd("set","a","b","c")==3);
        System.out.println(jedis.spop("set"));
        Set<String> a = jedis.smembers("set");
        Assert.assertTrue(a.size()==2);
        Assert.assertTrue(jedis.del("set")==1);

    }

    @Test
    public void testSRandMember(){
        /**
         * 如果命令執行時,只提供了 key 引數,那麼返回集合中的一個隨機元素。

         從 Redis 2.6 版本開始, SRANDMEMBER 命令接受可選的 count 引數:

         如果 count 為正數,且小於集合基數,那麼命令返回一個包含 count 個元素的陣列,陣列中的元素各不相同。如果 count 大於等於集合基數,那麼返回整個集合。
         如果 count 為負數,那麼命令返回一個數組,陣列中的元素可能會重複出現多次,而陣列的長度為 count 的絕對值。
         */
        Assert.assertTrue(jedis.sadd("set","a","b","c")==3);
        System.out.println(jedis.srandmember("set"));//不同於spop,srandmember不移除
        Set<String> a = jedis.smembers("set");
        Assert.assertTrue(a.size()==3);

        //測試多個隨機數
        List<String> lista = jedis.srandmember("set",2);//返回兩個不重複的隨機數
        System.out.println("lista:"+lista.toString());
        List<String> listb = jedis.srandmember("set",5);//5>3 返回全部資料
        System.out.println("listb:"+listb.toString());
        List<String> listc = jedis.srandmember("set",-2); //返回|-2|個可以重複的資料
        System.out.println("listc:"+listc.toString());
        List<String> listd = jedis.srandmember("set",-6); //返回|-6|個可以重複的資料
        System.out.println("listd:"+listd.toString());
        Assert.assertTrue(jedis.del("set")==1);
    }

    @Test
    public void testSRem(){
        //srem 移除集合 key 中的一個或多個 member 元素,不存在的 member 元素會被忽略。
        Assert.assertTrue(jedis.sadd("set","a","b","c")==3);
        Assert.assertTrue(jedis.srem("set","a","d")==1);
        Assert.assertTrue(jedis.del("set")==1);
    }

    @Test
    public void testSunion(){
        //sunion 返回一個集合的全部成員,該集合是所有給定集合的並集。
        Assert.assertTrue(jedis.sadd("set","a","b","c")==3);
        Assert.assertTrue(jedis.sadd("SET","A","B","C","a","b","c")==6);
        Set<String> set = jedis.sunion("set","SET");
        System.out.println(set.toString());
        Assert.assertTrue(set.size()==6);
        Assert.assertTrue(jedis.del("set","SET")==2);
    }

    @Test
    public void testSunionStore(){
        //sunion 返回一個集合的全部成員,該集合是所有給定集合的並集。
        Assert.assertTrue(jedis.sadd("set","a","b","c")==3);
        Assert.assertTrue(jedis.sadd("SET","A","B","C","a","b","c")==6);
        Assert.assertTrue(jedis.sunionstore("store","set","SET")==6);
        Assert.assertTrue(jedis.del("set","SET","store")==3);
    }

    @Test
    public void testSScan(){
        Pipeline pipeline = jedis.pipelined();
        for(int i=0;i<1000;i++){
            pipeline.sadd("set",String.valueOf(i));
        }
        pipeline.sync();
        ScanResult<String> result ;//=  jedis.sscan("set",0);
//        System.out.println(result.getResult().size()+"::"+result.getStringCursor());
//        System.out.println(result.getResult().toString());
        int count = 0;
        int cursor = 0;
        do{
//            System.out.println(result.getCursor());
            result = jedis.sscan("set",cursor);
            cursor = Integer.valueOf(result.getStringCursor());
            for (String ss : result.getResult()) {
                count++;
                System.out.print("<"+count+":" + ss + ">");
            }
            System.out.println();
        }
        while(cursor!=0);
        System.out.println(count);
        Assert.assertTrue(count==1000);
        Assert.assertTrue(jedis.del("set","SET","store")==1);
    }
}


相關推薦

java 操作Redis Set 命令 例項Jedis

直接上哎 package com.jjf.redis; import org.junit.Assert; import org.junit.Test; import redis.clients.jedis.Jedis; import redis.clients.jedis

Redis學習5-Jedis(Java操作redis數據庫技術)

new 抽取 數量 pack cli int .get demo1 可選 Java連接redis 一,導入jar包 Redis有什麽命令,Jedis就有什麽方法 設置防火墻 在Linux上面運行如下代碼: 單實例:Jedis實例: package com.jedi

23 redis&jedisjava操作redis

一、redis 認識nosql:     不支援sql語句來操作資料庫,而是需要用特定的語法來操作資料庫 1、關係型和非關係型資料庫比較 2.redis儲存資料的型別      

redis--java操作redis

技術分享 http ges 分享 .cn -1 -- edi image Java操作redis集群 redis--(六)java操作redis

Java操作Redis代碼演示

exce xxx mem log 來看 != 技術分享 org ons redis-demo演示 一、創建一個maven工程 1、在pom.xml中引入相關redis的相關依賴 1 <project xmlns="http://maven.apache.org/P

Redis學習JAVA操作Redis

enc main package 服務 clas redis學習 static out edi Redis學習(二)、JAVA操作Redis 一、測試連接Redis是否連通 1、導包 <dependency> <groupId>redis.c

jedis工具類:java操作redis資料庫

學完redis,需要在java客戶端中使用Jedis,作為連線redis的工具: JedisUtils工具類: public class JedisUtils{ //定義一個連線池物件: private final static JedisPool POOL; static {

Jedis操作Redis--Set型別

/**  * Set(集合)  * SADD,SCARD,SDIFF,SDIFFSTORE,SINTER,SINTERSTORE,SISMEMBER,SMEMBERS,SMOVE,SPOP,SRANDMEMBER,SREM,SUNION,SUNIONSTORE,SSCAN &nb

redis的資料型別Set,其原生命令和php操作Redis Set函式介紹

sRandMember(key,[count])函式 * 說明:從集合key中隨機取出一個或count個成員,但是不移除key中的成員 * 引數:key(集合的名稱),count(可選項,隨機取出成員的個數) * 返回值:沒有count引數,返回key中的一個成員(string);存在count,則返回隨機取

java操作redis叢集基本操作

package com.company; import redis.clients.jedis.HostAndPort; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisClu

java 操作redis Spring 連線池

Spring XML 配置檔案 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xml

Jedis客戶端操作redis快取命令詳解

jedis操作命令: 1.對value操作的命令      exists(key):確認一個key是否存在      del(key):刪除一個key      type(key):返回值的型別      keys(pattern):返回滿足給定pattern的

java操作redis資料庫三:set集合

package com.redis; import java.util.Set; import redis.clients.jedis.Jedis; public class set_redis {Jedis jedis;set_redis(){jedis=new Demo

redis 之 使用java操作redis

main print 數據庫 cli 防火墻 images enc png red 1. 在java操作redis需要使用jedis插件,並且linux要開啟相關的防火墻。 重啟防火墻服務 : 2. 新建maven項目: 3.添加項目依賴: <dependenc

java集合系列——Set之HashSet和TreeSet介紹

最大 ... gpo 鏈表 key 同步 中大 nds set接口 一.Set的簡介Set是一個不包含重復元素的 collection。更確切地講,set 不包含滿足 e1.equals(e2) 的元素。對 e1 和 e2,並且最多包含一個為 null 的元素。 Set的類

redis,1】java操作redis: 將string、list、map、自己定義的對象保存到redis

n) spa 存儲 div ber sys mil 操作 write 一、操作string 、list 、map 對象 1、引入jar: jedis-2.1.0.jar 2、代碼 /

Java操作Redis的簡單實例

Java操作Redis Redis的使用 Redis的簡單使用 Java與Redis結合 Java操作Redis是必備學習的內容,那我直接上一個超級簡單的案例給大家參考下!一、創建RedisTest類,代碼如下!import redis.clients.jedis.Jedis; public

第一次使用java操作Redis以及錯誤小結

目錄 java操作Redis的流程: 1.匯入jedis依賴包:  2.匯入junit依賴包: 3.寫測試方法:  關於testJedis( )執行時控制檯報錯分析: 1.redis.clients.jedis.exceptions.JedisConnec

swoft操作redis、多例項配置

修改連線池配置 app/config/properties/cache.php 配置檔案 return [ 'redis' => [ 'name' => 'redis', 'uri' =>

window java操作redis.doc

首先要用JAVA操作redis,需要先將redis服務端(no sql資料伺服器)開啟 第一步:解壓Redis-x64-3.2.100.zip (在百度網盤 學習文件子目錄壓縮\專項進階,如ngnix,webservice,linux,redis等\redis\wind