正如JavaSE集合体系中的Set一样,元素唯一存储,但是是无序的
- Redis的Set是String类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据
- Redis中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)
- 集合中最大的成员数为2^32-1,每个集合可存储40多亿个成员
命令
sadd setOne redis 插入元素
sadd setOne mysql
smembers setOne: 获取所有元素
scard setOne: 获取集合中的元素个数
sadd setTwo mysql python php oracle
sdiff setOne setTwo:差集 表示存在于第一个集合,而不存在于第二个集合的元素
sinter setOne setTwo:交集
sunion setOnet setTwo:并集
sismember setOne mysql:判断mysql是否setOne集合中的成员
spop setOne:随机地弹出一个元素
srandmember setOne 1[count]:随机返回(而不是弹出)count个元素
srem setTwo python oracle:移除集合setTwo中指定的python和oracle成员
对应API的使用
@Test
public void method3(){
log.info("--开始集合Set测试--");
final String key1 = "SpringBoot:Set:10010:V1";
final String key2 = "SpringBoot:Set:10011:V2";
redisTemplate.delete(key1);
redisTemplate.delete(key2);
SetOperations<String, String> setOperations = redisTemplate.opsForSet();
setOperations.add(key1, new String[]{"a","b","c"});
setOperations.add(key2, new String[]{"b","e","f"});
log.info("--集合key1的元素:{}", setOperations.members(key1));
log.info("--集合key2的元素:{}", setOperations.members(key2));
log.info("--集合key1随机取1个元素:{}", setOperations.randomMember(key1));
log.info("--集合key1随机取n个元素:{}", setOperations.randomMembers(key1, 2));
log.info("--集合key1元素个数:{}", setOperations.size(key1));
log.info("--集合key2元素个数:{}", setOperations.size(key2));
log.info("--元素a是否为集合key1的元素:{}", setOperations.isMember(key1, "a"));
log.info("--元素f是否为集合key1的元素:{}", setOperations.isMember(key1, "f"));
log.info("--集合key1和集合key2的差集元素:{}", setOperations.difference(key1,key2));
log.info("--集合key1和集合key2的交集元素:{}", setOperations.intersect(key1,key2));
log.info("--集合key1和集合key2的并集元素:{}", setOperations.union(key1,key2));
log.info("--从集合key1中弹出一个随机的元素:{}", setOperations.pop(key1));
log.info("--集合key1的元素:{}", setOperations.members(key1));
log.info("--将c从集合key1的元素列表中移除:{}", setOperations.remove(key1, "c"));
log.info("--集合key1的元素:{}", setOperations.members(key1));
}
运行结果