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