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);
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM