
4.4.1 概述核心特性元素唯一性集合中的每个元素都是唯一的不会重复存储。无序性集合中的元素没有固定顺序无法通过下标定位元素。Set 与 List 类型对比维度集合类型Set列表类型List存储内容至多2^32−1个字符串至多2^32−1个字符串有序性❌ 无元素无固定顺序✅ 有元素按插入顺序排列唯一性✅ 是元素不可重复❌ 否元素可以重复底层实现与性能底层实现使用值为空的散列表hash table实现。性能特点添加、删除、判断元素是否存在等操作的时间复杂度均为 O(1)效率极高。常用操作基础操作向集合中添加 / 删除元素、判断元素是否存在。集合运算支持多个集合之间的交集、并集、差集计算可用于实现共同关注、共同好友等业务场景。4.4.2 命令增加/删除元素SADD key member [member ...] SREM key member [member ...]返回值为成功增加和删除的元素个数。获得集合中的所有元素SMEMBERS key判断元素是否在集合中判断元素是否在集合中无论集合中有多少元素都可以极速的返回结果。返回值1为在0不在。SISMEMBER key member4.4.3 方法List类型核心操作Redis 命令StringRedisTemplate 方法返回值说明sadd set a b copsForSet().add(setKey, a, b, c)Long 类型成功新增的元素数量srem set c dopsForSet().remove(setKey, c, d)Long 类型成功删除的元素数量smembers setopsForSet().members(setKey)Set 类型集合所有元素sismember set aopsForSet().isMember(setKey, a)Boolean 类型元素是否存在总结add() 和 remove() 支持传入多个元素用逗号分隔直接对应 Redis 命令的 [member ...] 语法无需循环单个操作。SpringBoot 中操作 Redis Set 类型的核心套路是 stringRedisTemplate.opsForSet().xxx()代码package com.qcby.springbootredis; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.redis.core.StringRedisTemplate; import java.util.Set; SpringBootTest public class SetTest { Autowired private StringRedisTemplate stringRedisTemplate; Test public void testSetBasicOperation() { // 定义 Set 集合的 key和你的示例保持一致 String setKey set; try { // 1. 新增元素对应 SADD 命令 // 示例1sadd set a b c Long addCount1 stringRedisTemplate.opsForSet().add(setKey, a, b, c); System.out.println(sadd set a b c → 返回新增元素数 addCount1); // 输出 3 // 示例2sadd set aa已存在无新增元素 Long addCount2 stringRedisTemplate.opsForSet().add(setKey, a); System.out.println(sadd set a → 返回新增元素数 addCount2); // 输出 0 // 2. 删除元素对应 SREM 命令 // 示例srem set c dc存在被删除d不存在 Long removeCount stringRedisTemplate.opsForSet().remove(setKey, c, d); System.out.println(srem set c d → 返回删除元素数 removeCount); // 输出 1 // 3. 获取集合中所有元素对应 SMEMBERS 命令 SetString allMembers stringRedisTemplate.opsForSet().members(setKey); System.out.println(smembers set → 集合所有元素 allMembers); // 输出 [b,a]顺序可能不同Set 无序 // 4. 判断元素是否在集合中对应 SISMEMBER 命令 // 示例1sismember set aa存在 Boolean isMemberA stringRedisTemplate.opsForSet().isMember(setKey, a); System.out.println(sismember set a → 是否存在 (isMemberA ? 1 : 0)); // 输出 1 // 示例2sismember set hh不存在 Boolean isMemberH stringRedisTemplate.opsForSet().isMember(setKey, h); System.out.println(sismember set h → 是否存在 (isMemberH ? 1 : 0)); // 输出 0 } catch (Exception e) { e.printStackTrace(); } } }