当前位置: 首页 > news >正文

Redis值数据类型——set

4.4.1 概述

  1. 核心特性
  • 元素唯一性
集合中的每个元素都是唯一的,不会重复存储。
  • 无序性集
合中的元素没有固定顺序,无法通过下标定位元素。
  1. Set 与 List 类型对比
维度
集合类型(Set)
列表类型(List)
存储内容
至多
2^32−1
个字符串
至多
2^32−1
个字符串
有序性
❌ 无(元素无固定顺序)
✅ 有(元素按插入顺序排列)
唯一性
✅ 是(元素不可重复)
❌ 否(元素可以重复)
  1. 底层实现与性能
  • 底层实现
使用值为空的散列表(hash table)实现。
  • 性能特点
添加、删除、判断元素是否存在等操作的时间复杂度均为 O(1),效率极高。
  1. 常用操作
  • 基础操作
向集合中添加 / 删除元素、判断元素是否存在。
  • 集合运算
支持多个集合之间的交集、并集、差集计算,可用于实现共同关注、共同好友等业务场景。

4.4.2 命令

  1. 增加/删除元素
SADD key member [member ...] SREM key member [member ...]
返回值为成功增加和删除的元素个数。
  1. 获得集合中的所有元素
SMEMBERS key
  1. 判断元素是否在集合中
判断元素是否在集合中,无论集合中有多少元素都可以极速的返回结果。
返回值1为在,0不在。
SISMEMBER key member

4.4.3 方法

  1. List类型核心操作
Redis 命令
StringRedisTemplate 方法
返回值说明
sadd set a b c
opsForSet().add(setKey, "a", "b", "c")
Long 类型,成功新增的元素数量
srem set c d
opsForSet().remove(setKey, "c", "d")
Long 类型,成功删除的元素数量
smembers set
opsForSet().members(setKey)
Set 类型,集合所有元素
sismember set a
opsForSet().isMember(setKey, "a")
Boolean 类型,元素是否存在
  1. 总结
  • add() 和 remove() 支持传入多个元素(用逗号分隔),直接对应 Redis 命令的 [member ...] 语法,无需循环单个操作。
  • SpringBoot 中操作 Redis Set 类型的核心套路是 stringRedisTemplate.opsForSet().xxx();
  1. 代码
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 命令) ========== // 示例1:sadd set a b c Long addCount1 = stringRedisTemplate.opsForSet().add(setKey, "a", "b", "c"); System.out.println("sadd set a b c → 返回新增元素数:" + addCount1); // 输出 3 // 示例2:sadd set a(a已存在,无新增元素) Long addCount2 = stringRedisTemplate.opsForSet().add(setKey, "a"); System.out.println("sadd set a → 返回新增元素数:" + addCount2); // 输出 0 // ========== 2. 删除元素(对应 SREM 命令) ========== // 示例:srem set c d(c存在被删除,d不存在) Long removeCount = stringRedisTemplate.opsForSet().remove(setKey, "c", "d"); System.out.println("srem set c d → 返回删除元素数:" + removeCount); // 输出 1 // ========== 3. 获取集合中所有元素(对应 SMEMBERS 命令) ========== Set<String> allMembers = stringRedisTemplate.opsForSet().members(setKey); System.out.println("smembers set → 集合所有元素:" + allMembers); // 输出 [b,a](顺序可能不同,Set 无序) // ========== 4. 判断元素是否在集合中(对应 SISMEMBER 命令) ========== // 示例1:sismember set a(a存在) Boolean isMemberA = stringRedisTemplate.opsForSet().isMember(setKey, "a"); System.out.println("sismember set a → 是否存在:" + (isMemberA ? 1 : 0)); // 输出 1 // 示例2:sismember set h(h不存在) Boolean isMemberH = stringRedisTemplate.opsForSet().isMember(setKey, "h"); System.out.println("sismember set h → 是否存在:" + (isMemberH ? 1 : 0)); // 输出 0 } catch (Exception e) { e.printStackTrace(); } } }
http://www.jsqmd.com/news/495161/

相关文章:

  • GPT-5.4原生电脑操控实战:从零实现AI自动办公全流程
  • 万磊石业做园林水景费用多少,是值得选择的厂家吗? - 工业设备
  • 如何找到安全靠谱的京东e卡回收平台? - 团团收购物卡回收
  • 双令牌机制:让认证更安全、体验更流畅
  • 国内知名的包装设计公司怎么联系
  • 千寻起名助手小程序(1.0)
  • 基于IPSO-SVM算法的优化与数据分类预测系统——非线性权重粒子群优化支持向量机分类模型
  • 跨境电商爆款逻辑如何打造月销万单的海外热品
  • Python iMessage 虚拟机群发系统:批量发送 + 进度条 + Excel 报告完整实现方案(2026 实测)
  • 京东e卡回收全流程解析 - 团团收购物卡回收
  • C++代码静态分析工具比较
  • JVS-Rules规则类型详解:决策树、评分卡与规则集
  • 多语言UI测试案例:跨境App本地化错误预防深度解析
  • 6.1 LCVAE-CNN:基于LCVAE的室内Wi‑Fi指纹CNN定位方法
  • JavaScript性能优化实战敬爸
  • WangEditor在Vue2中如何处理Word文档中的表格粘贴?
  • 基于Matlab的弧齿锥齿轮啮合轨迹分析程序:输出齿轮啮合轨迹及传递误差模拟结果
  • 国内用Antigravity的remote SSH 必须注意事项
  • Vue3转React速查表
  • 当贝D7X Pro亮相315,网友:这配置放在三千元是降维打击!
  • windows通过网线连接linux开发板使用tftp传输文件
  • 三方备付金·非同充值+非同代付+D0秒到
  • 本地部署 vs 云端:OpenClaw 隐私安全机制深度拆解
  • SOM-BP多变量时序预测:已调试好的MATLAB程序(含清晰注释与评价指标)
  • LXQt 桌面配置不完全指南
  • 三相光伏并网逆变器方案:基于TMS32F2808主控芯片,包含接口板、电源板等多元化组件的综合...
  • GC Roots与可达性分析——对象是如何被标记存活的?
  • 每日一题:Span<T>和Memory<T>
  • 万爱通礼品卡闲置不用?教你选择最靠谱的线上回收渠道 - 团团收购物卡回收
  • 网页编辑器如何优化WangEditor的Word粘贴功能?