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

Redis:分组与设备在 Redis 中缓存存储设计

一、缓存存储结构设计

  • 分组与设备的映射关系(使用 Set 结构)
    • 键格式:采用 group:{groupId}:devices 的格式作为 Redis 中 Set 的键,例如 group:1:devices 就代表了分组 ID 为 1 的分组所关联的设备集合。
    • 值内容:Set 中的元素为设备 ID,如 device001device002 等。这样的设计使得可以方便且高效地判断某个设备是否属于特定分组、快速添加或移除设备到分组中,利用了 Set 数据结构操作成员的高效性(时间复杂度为 O(1)),非常适合维护分组与设备之间多对多的映射关系。
  • 设备详细信息(使用 Hash 结构)
    • 键格式:以 device:{deviceId} 作为键,像 device:device001 即对应设备 ID 为 device001 的设备详细信息存储位置。
    • 值内容:Hash 内部存储设备的各项属性,例如 { "name": "设备名称", "status": "on", "type": "1" },通过不同的字段(field)存储设备名称、状态、类型等信息,便于后续根据设备 ID 精准查询和更新设备的某一项或多项属性,借助 Redis 的 HGETHSET 等命令能灵活操作这些属性值。

二、Spring Boot 中的实现示例

创建操作分组与设备缓存的服务类

import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import java.util.Set;
import java.util.concurrent.TimeUnit;@Service
public class GroupDeviceCacheService {private final RedisTemplate<String, String> redisTemplate;public GroupDeviceCacheService(RedisTemplate<String, String> redisTemplate) {this.redisTemplate = redisTemplate;}// 添加设备到分组的方法public void addDeviceToGroup(String groupId, String deviceId) {redisTemplate.opsForSet().add("group:" + groupId + ":devices", deviceId);}// 从分组移除设备的方法public void removeDeviceFromGroup(String groupId, String deviceId) {redisTemplate.opsForSet().remove("group:" + groupId + ":devices", deviceId);}// 获取分组下所有设备 ID 的方法public Set<String> getDevicesByGroup(String groupId) {return redisTemplate.opsForSet().members("group:" + groupId + ":devices");}// 获取设备详细信息的方法public Map<String, String> getDeviceInfo(String deviceId) {return redisTemplate.opsForHash().entries("device:" + deviceId);}// 更新设备某一属性的方法(以更新状态为例)public void updateDeviceStatus(String deviceId, String newStatus) {redisTemplate.opsForHash().put("device:" + deviceId, "status", newStatus);}// 设置分组与设备映射关系缓存过期时间的方法(可按需调用)public void setGroupDeviceMappingExpire(String groupId, long expireTime, TimeUnit timeUnit) {redisTemplate.expire("group:" + groupId + ":devices", expireTime, timeUnit);}
}

代码实现了如添加设备到分组、移除设备、查询分组下设备以及设备详细信息的获取和更新等核心功能,同时还可以设置缓存的过期时间来控制缓存数据的有效期。

三、优势与应用场景

  • 优势
    • 操作高效性:Set 结构用于分组与设备的映射,在添加、删除设备以及判断设备所属分组等操作上效率高;Hash 结构存储设备详细信息能快速查询和更新单个属性,整体提升了缓存数据的读写性能,满足频繁的设备管理操作需求。
    • 数据清晰性与可维护性:两种结构清晰地划分了分组与设备的关联以及设备自身的属性信息,逻辑上易于理解和维护,无论是新增、修改还是查询相关数据,代码的可读性和可扩展性都较好。
    • 灵活应对业务变化:可以方便地根据业务需求扩展设备属性(在 Hash 结构中添加新的 field),或者调整分组与设备的关联关系(通过 Set 操作),很好地适配智能家居业务场景下可能出现的变化。
  • 应用场景
    • 智能家居系统:用于管理家庭内不同房间分组(如客厅分组、卧室分组)下的各类智能设备(智能音箱、智能灯具等),可以快速查询设备状态、控制设备,也能方便地进行设备在不同房间分组间的迁移等操作。
http://www.xdnf.cn/news/15000.html

相关文章:

  • 类与对象【下篇】-- 关于类的其它语法
  • Linux——I/O复用
  • Android API Level 到底是什么?和安卓什么关系?应用发布如何知道自己的版本?优雅草卓伊凡
  • 光伏无人机3D建模:毫秒级精度设计
  • Webpack、Vite配置技巧与CI/CD流程搭建全解析
  • 什么是公链?
  • 敏捷模式下开发与测试的最佳协作模式
  • Node.Js是什么?
  • 【bug修复积累】关于包装类型和基本数据类型的使用
  • 分库分表之实战-sharding-JDBC水平分库+分表后:查询与删除操作实战
  • SQLZoo 练习与测试答案汇总(复杂题有最优解与其他解法分析、解题技巧)
  • 全志H616开发学习文档
  • WPF学习笔记(27)科学计算器
  • ObjectClear - 图像处理新革命,一键“抹除”图像中任意物体与阴影 支持50系显卡 一键整合包下载
  • [附源码+数据库+毕业论]基于Spring Boot+mysql+vue结合内容推荐算法的学生咨询系统
  • 如何将FPGA设计的验证效率提升1000倍以上(3)
  • rt thread studio 和 KEIL对于使用rt thread 的中间件和组件,哪个更方便
  • 使用 Docker 搭建 Go Web 应用开发环境——AI教你学Docker
  • Mac mini 高性价比扩容 + Crossover 游戏实测 全流程手册
  • Go语言Gin框架实战:开发技巧
  • 【保姆级喂饭教程】Windows下安装Git Flow
  • LabVIEW前面板颜色修改
  • uniapp如何创建并使用组件?组件通过Props如何进行数据传递?
  • 基于Java+Maven+Testng+Selenium+Log4j+Allure+Jenkins搭建一个WebUI自动化框架(5)失败用例截图与重试
  • 源码角度解析 --- HashMap 的 get 和 put 流程
  • LLM 在预测下一个词的时候是怎么计算向量的,说明详细过程
  • vue3.2 前端动态分页算法
  • 大数据在UI前端的应用创新研究:基于机器学习的用户异常行为检测
  • Flutter基础(前端教程⑨-图片)
  • 数字大脑的培育法则:深度解读监督学习神经网络