1. 程式人生 > >Jedis操作Redis--Set型別

Jedis操作Redis--Set型別

/**
 * Set(集合)
 * SADD,SCARD,SDIFF,SDIFFSTORE,SINTER,SINTERSTORE,SISMEMBER,SMEMBERS,SMOVE,SPOP,SRANDMEMBER,SREM,SUNION,SUNIONSTORE,SSCAN
 */
public class SetTypeTest {
    private Jedis jedis;

    private static final String KEY = "set";

    private static final String VALUE = "layman";

    @Before
    public void setUp() {
        this.jedis = new Jedis(new JedisShardInfo("192.168.133.188", 6379));
    }

    /**
     * SADD key member [member ...]
     * 將一個或多個 member 元素加入到集合 key 當中,已經存在於集合的 member 元素將被忽略。
     * 假如 key 不存在,則建立一個只包含 member 元素作成員的集合。
     * 當 key 不是集合型別時,返回一個錯誤。
     */
    @Test
    public void SADD() {
        jedis.sadd(KEY, VALUE + 2, VALUE + 0, VALUE + 1);
        SMEMBERS();
    }

    /**
     * SCARD key
     * 返回集合 key 的基數(集合中元素的數量)。
     */
    @Test
    public void SCARD() {
        System.out.println(jedis.scard(KEY));
    }

    /**
     * SDIFF key [key ...]
     * 返回一個集合的全部成員,該集合是所有給定集合之間的差集。
     * 不存在的 key 被視為空集。
     * <p/>
     * SDIFFSTORE destination key [key ...]
     * 這個命令的作用和 SDIFF 類似,但它將結果儲存到 destination 集合,而不是簡單地返回結果集。
     * 如果 destination 集合已經存在,則將其覆蓋。
     * destination 可以是 key 本身。
     */
    @Test
    public void SDIFF() {
        SMEMBERS();
        jedis.sadd(KEY + 0, VALUE + 1, VALUE + 3);
        System.out.println(jedis.smembers(KEY + 0));
        System.out.println(jedis.sdiff(KEY, KEY + 0));//返回值為KEY-KEY0的值
    }

    /**
     * SINTER key [key ...]
     * 返回一個集合的全部成員,該集合是所有給定集合的交集。
     * 不存在的 key 被視為空集。
     * 當給定集合當中有一個空集時,結果也為空集(根據集合運算定律)。
     * <p/>
     * SINTERSTORE destination key [key ...]
     * 這個命令類似於 SINTER 命令,但它將結果儲存到 destination 集合,而不是簡單地返回結果集。
     * 如果 destination 集合已經存在,則將其覆蓋。
     * destination 可以是 key 本身。
     */
    @Test
    public void SINTER() {
        System.out.println(jedis.sinter(KEY, KEY + 0));
    }

    /**
     * SISMEMBER key member
     * 判斷 member 元素是否集合 key 的成員。
     */
    @Test
    public void SISMEMBER() {
        System.out.println(jedis.sismember(KEY, VALUE + 0));
        System.out.println(jedis.sismember(KEY, VALUE + 5));
    }

    /**
     * SMEMBERS key
     * 返回集合 key 中的所有成員。
     * 不存在的 key 被視為空集合。
     */
    @Test
    public void SMEMBERS() {
        Set<String> smembers = jedis.smembers(KEY);
        System.out.println(smembers);
    }

    /**
     * SMOVE source destination member
     * 將 member 元素從 source 集合移動到 destination 集合。
     * SMOVE 是原子性操作。
     * 如果source集合不存在或不包含指定的member元素,則SMOVE命令不執行任何操作,僅返回0。否則,member元素從source集合中被移除,並新增到destination 集合中去。
     * 當 destination 集合已經包含 member 元素時, SMOVE 命令只是簡單地將 source 集合中的 member 元素刪除。
     * 當 source 或 destination 不是集合型別時,返回一個錯誤。
     */
    @Test
    public void SMOVE() {
        System.out.println(jedis.smembers(KEY));
        System.out.println(jedis.smembers(KEY + 0));
        jedis.smove(KEY, KEY + 0, "layman0");
        System.out.println(jedis.smembers(KEY));
        System.out.println(jedis.smembers(KEY + 0));
    }

    /**
     * SPOP key
     * 移除並返回集合中的一個隨機元素。
     * 如果只想獲取一個隨機元素,但不想該元素從集合中被移除的話,可以使用 SRANDMEMBER 命令。
     */
    @Test
    public void SPOP() {
        SMEMBERS();
        System.out.println(jedis.spop(KEY));
        SMEMBERS();
    }

    /**
     * SRANDMEMBER key [count]
     * 如果命令執行時,只提供了 key 引數,那麼返回集合中的一個隨機元素。
     * 從 Redis 2.6 版本開始, SRANDMEMBER 命令接受可選的 count 引數:
     * 如果 count 為正數,且小於集合基數,那麼命令返回一個包含 count 個元素的陣列,陣列中的元素各不相同。如果 count 大於等於集合基數,那麼返回整個集合。
     * 如果 count 為負數,那麼命令返回一個數組,陣列中的元素可能會重複出現多次,而陣列的長度為 count 的絕對值。
     * 該操作和 SPOP 相似,但 SPOP 將隨機元素從集合中移除並返回,而 SRANDMEMBER 則僅僅返回隨機元素,而不對集合進行任何改動。
     */
    @Test
    public void SRANDMEMBER() {
        System.out.println(jedis.smembers(KEY + 0));
        System.out.println(jedis.srandmember(KEY + 0, 2));
        System.out.println(jedis.srandmember(KEY + 0, -2));
    }

    /**
     * SREM key member [member ...]
     * 移除集合 key 中的一個或多個 member 元素,不存在的 member 元素會被忽略。
     * 當 key 不是集合型別,返回一個錯誤。
     */
    @Test
    public void SREM() {
        SMEMBERS();
        jedis.srem(KEY, "layman1");
        SMEMBERS();
    }

    /**
     * SUNION key [key ...]
     * 返回一個集合的全部成員,該集合是所有給定集合的並集。
     * 不存在的 key 被視為空集。
     * <p/>
     * SUNIONSTORE destination key [key ...]
     * 這個命令類似於 SUNION 命令,但它將結果儲存到 destination 集合,而不是簡單地返回結果集。
     * 如果 destination 已經存在,則將其覆蓋。
     * destination 可以是 key 本身。
     */
    @Test
    public void SUNION() {
        SMEMBERS();
        jedis.sadd(KEY + 0, "layman" + new Random().nextInt(50));
        System.out.println(jedis.sunion(KEY, KEY + 0));
    }
}