package cn.com; import java.util.HashMap; import java.util.Map; import java.util.Set; import redis.clients.jedis.Jedis; /** * 集合的所有操作方法 * * */ public class Redis_Set { public static Jedis redis = new Jedis("localhost", 6379);// 连接redis public static void zadd(){ Map<String,Double> map=new HashMap<String,Double>(); redis.zadd("user",map); } /** * 将一个或多个 元素加入到集合 key 当中,已经存在于集合的 member 元素将被忽略。 * */ public static void sadd(){ redis.flushDB();//清除数据 redis.sadd("user", "a","b","c","d","e","f"); Set<String> setList=redis.smembers("user"); for(String s:setList){ System.out.println(s); } } /** * SCARD key * 返回集合 key 的基数(集合中元素的数量) * */ public static void scard(){ redis.flushDB();//清除数据 redis.sadd("user", "a","b","c","d","e","f"); Long number=redis.scard("user"); System.out.println(number); } /** * SDIFF key [key ...] 求差集 * 返回一个集合的全部成员,该集合是所有给定集合之间的差集。 * 不存在的 key 被视为空集。 * 相当月user减去user1 剩下的 user 元素 * */ public static void sdiff(){ redis.flushDB();//清除数据 redis.sadd("user", "a","b","c","z"); redis.sadd("user1", "a","c","d","f"); Set<String> setList=redis.sdiff("user","user1"); for(String s:setList){ System.out.println(s); } } /** * SDIFFSTORE destination key [key ...]求差集 将结果放入新的结合中 * 这个命令的作用和 SDIFF 类似,但它将结果保存到 destination 集合,而不是简单地返回结果集。 * 如果 destination 集合已经存在,则将其覆盖。 * destination 可以是 key 本身。 * N 是所有给定集合的成员数量之和. * 例如:以下例子是 取出 user中在user1 不包含的元素 也就是(zzz)在user1 中不存在 * */ public static void sdiffstore(){ redis.flushDB();//清除数据 redis.sadd("user", "a","b","c","zzzz"); redis.sadd("user1", "a","b","c","d","e","f"); long size=redis.sdiffstore("newuser","user","user1"); System.out.println("size:"+size); Set<String> setList=redis.smembers("newuser"); for(String s:setList){ System.out.println(s); } } /** * SINTER key [key ...] 求交集 * 返回一个集合的全部成员,该集合是所有给定集合的交集。 * 不存在的 key 被视为空集。 * 当给定集合当中有一个空集时,结果也为空集(根据集合运算定律)。 * */ public static void sinter(){ redis.flushDB();//清除数据 redis.sadd("user", "a","b","c","zzzz"); redis.sadd("user1", "a","b","c","d","e","f"); Set<String> setList=redis.sinter("user","user1"); for(String s:setList){ System.out.println(s); } } /** * SINTER key [key ...] 求交集 跟sinter区别在于是将差集的结果集放入新的数组中 如下的:newuser * 返回一个集合的全部成员,该集合是所有给定集合的交集。 * 不存在的 key 被视为空集。 * 当给定集合当中有一个空集时,结果也为空集(根据集合运算定律)。 * */ public static void sinterstore(){ redis.flushDB();//清除数据 redis.sadd("user", "a","b","c","zzzz"); redis.sadd("user1", "a","b","c","d","e","f"); long size=redis.sinterstore("newuser","user","user1"); System.out.println("交集的大小:"+size); Set<String> setList=redis.smembers("newuser"); for(String s:setList){ System.out.println(s); } } /** * SUNION key [key ...] * 返回一个集合的全部成员,该集合是所有给定集合的并集。 * 不存在的 key 被视为空集。 * */ public static void sunion(){ redis.flushDB();//清除数据 redis.sadd("user", "a","b","c","zzzz"); redis.sadd("user1", "a","b","c","d","e","f"); Set<String> setList=redis.sunion("user","user1"); for(String s:setList){ System.out.println(s); } } /** * SUNION key [key ...] 将两个集合的并集放入新的结合中 newuser * 返回一个集合的全部成员,该集合是所有给定集合的并集。 * 不存在的 key 被视为空集。 * */ public static void sunionstore(){ redis.flushDB();//清除数据 redis.sadd("user", "a","b","c","zzzz"); redis.sadd("user1", "a","b","c","d","e","f"); long l=redis.sunionstore("newuser","user","user1"); Set<String> setList=redis.smembers("newuser"); for(String s:setList){ System.out.println(s); } } /** * SISMEMBER key member *判断 member 元素是否集合 key 的成员。 * */ public static void sismember(){ redis.flushDB();//清除数据 redis.sadd("user", "a","b","c","zzzz"); boolean b=redis.sismember("user", "a"); boolean b1=redis.sismember("user", "不存在哦"); System.out.println("返回一个 true 跟 false"); System.out.println(b); System.out.println(b1); } /** * 获取集合对象 * */ public static void smembers(){ redis.flushDB();//清除数据 redis.sadd("user", "a","b","c","d","e","f"); Set<String> setList=redis.smembers("user"); for(String s:setList){ System.out.println(s); } } /** * SMOVE source destination member * SMOVE 是原子性操作。 * @param srckey 源集合key * @param dstkey 目标集合key * @param member 要移动的元素 * 将源集合中的 元素member 移动到目标集合中 * 返回值: * 如果 member 元素被成功移除,返回 1 。 * 如果 member 元素不是 source 集合的成员,并且没有任何操作对 destination 集合执行,那么返回 0 。 */ public static void smove(){ redis.flushDB();//清除数据 redis.sadd("user", "a","b","c","zzzz"); redis.sadd("user1", "d","e","f"); redis.smove("user", "user1", "zzzz"); System.out.println("======user剩下的元素应该是 a,b,c======"); Set<String> setList=redis.smembers("user"); for(String s:setList){ System.out.println(s); } System.out.println("======user 1的元素应该是 d,e,f,zzz======"); Set<String> setList1=redis.smembers("user1"); for(String s:setList1){ System.out.println(s); } } /** * SPOP key * 移除并返回集合中的一个随机元素。 * 如果只想获取一个随机元素,但不想该元素从集合中被移除的话,可以使用 SRANDMEMBER 命令。 * */ public static void spop(){ redis.flushDB();//清除数据 redis.sadd("user", "1","2","3","4","5","6","7"); String s=redis.spop("user"); System.out.println("随机弹出并移除的元素:"+s); Set<String> setList=redis.smembers("user"); for(String str:setList){ System.out.println(str); } } /** * 如果命令执行时,只提供了 key 参数,那么返回集合中的一个随机元素。 * */ public static void srandmember(){ redis.flushDB();//清除数据 redis.sadd("user", "1","2","3","4","5","6","7"); String s=redis.srandmember("user"); System.out.println("随机弹出不删除的元素:"+s); Set<String> setList=redis.smembers("user"); for(String str:setList){ System.out.println(str); } } /** * SREM key member [member ...] * 移除集合 key 中的一个或多个 member 元素,不存在的 member 元素会被忽略。 * 当 key 不是集合类型,返回一个错误。 * */ public static void srem(){ redis.flushDB();//清除数据 redis.sadd("user", "1","2","3","4","5","6","7"); redis.srem("user", "1","3","5");//删除1,3,5 Set<String> setList=redis.smembers("user"); for(String str:setList){ System.out.println(str); } } public static void main(String [] args){ sunionstore(); } }