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