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.pswp.cn/news/913761.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/913761.shtml
英文地址,請注明出處:http://en.pswp.cn/news/913761.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Leetcode 3605. Minimum Stability Factor of Array

Leetcode 3605. Minimum Stability Factor of Array 1. 解題思路2. 代碼實現 題目鏈接&#xff1a;3605. Minimum Stability Factor of Array 1. 解題思路 這一題的核心思路是二分法&#xff0c;本質上就是我們給定一個常數kkk&#xff0c;然后考察是否存在一個構造使得能夠…

編譯安裝的Mysql5.7報“Couldn‘t find MySQL server (mysqld_safe)“的原因 筆記250709

編譯安裝的Mysql5.7報"Couldn’t find MySQL server (mysqld_safe)"的原因 筆記250709 MySQL 的安裝路徑與配置文件&#xff08;如 my.cnf 或 mysql.server&#xff09;中指定的 basedir 不一致。 mysqld_safe 文件實際位置與系統查找路徑不匹配&#xff08;常見于自…

在 Ubuntu 下配置 oh-my-posh —— 普通用戶 + root 各自使用獨立主題(共享可執行)

&#x1f9e9; 在 Ubuntu 下配置 oh-my-posh —— 普通用戶 root 各自使用獨立主題&#xff08;共享可執行&#xff09;? 目標說明普通用戶 使用 tokyonight_storm 主題 root 用戶 使用 1_shell 主題 共用全局路徑下的 oh-my-posh 可執行文件 正確加載 Homebrew 到環境變量中…

Spring Boot 項目中的多數據源配置

關鍵詞&#xff1a;Spring Boot、多數據源配置、MySQL、SQL Server、Oracle、動態切換 ? 摘要 在實際企業級開發中&#xff0c;一個 Spring Boot 項目可能需要連接多個數據庫&#xff0c;比如 MySQL、SQL Server 和 Oracle。不同的業務模塊可能依賴不同的數據源&#xff0c;這…

MATLAB/Simulink電機控制仿真代做 同步異步永磁直驅磁阻雙饋無刷

以下是針對 MATLAB/Simulink 電機控制仿真 的系統性解決方案&#xff0c;涵蓋 同步電機、異步電機、永磁電機、直驅電機、磁阻電機、雙饋電機、無刷直流電機&#xff08;BLDC&#xff09; 的建模與控制策略實現&#xff0c;支持代做服務的技術細節和代碼示例。一、電機建模與仿…

限流算法深度探索:從理論到實踐的生產級避坑指南

凌晨3點&#xff0c;監控警報刺耳地尖叫著。我盯著屏幕上垂直下跌的服務可用性曲線&#xff0c;意識到那個被忽視的限流配置項終于引爆了——每秒1000次的支付請求正像洪水般沖垮我們的系統。這次事故讓我深刻理解&#xff1a;限流不是可選項&#xff0c;而是分布式系統的生存法…

企業級后臺管理系統的困境與飛算 JavaAI 的破局之道

企業級后臺管理系統如 CRM&#xff08;客戶關系管理系統&#xff09;、ERP&#xff08;企業資源計劃系統&#xff09;已成為支撐企業高效運轉的核心骨架。它們如同企業的 “神經中樞”&#xff0c;串聯起客戶數據、財務信息、供應鏈流程等關鍵環節&#xff0c;為決策制定、業務…

快速上手百寶箱搭建知識闖關游戲助手

引言&#xff1a;讓學習更有趣&#xff0c;AI 賦能知識闖關新體驗 1.在信息爆炸的時代&#xff0c;傳統的填鴨式教學方式已難以滿足現代用戶對高效、個性化和趣味化學習的需求。越來越多的學習者傾向于通過互動性強、參與感十足的方式獲取知識。在此背景下&#xff0c;游戲化學…

【YOLOv11-目標檢測】目標檢測數據格式(官方說明)

原文鏈接&#xff1a; https://docs.ultralytics.com/datasets/detect/ 寫在前面 訓練一個魯棒且準確的目標檢測模型需要一個全面的數據集。本文介紹&#xff1a;與Ultralytics YOLO模型兼容的各種數據集格式&#xff0c;并深入解析了它們的結構、使用方法以及如何在不同的格…

yolo8實現目標檢測

?步驟一&#xff1a;安裝 PyTorch&#xff08;M1 專用&#xff09;# 推薦使用官方 MPS 后端&#xff08;Apple Metal 加速&#xff09; pip install torch torchvision torchaudio確認是否使用了 Apple MPS&#xff1a;import torch print(torch.backends.mps.is_available()…

安全管理協議(SMP):配對流程、密鑰生成與防中間人攻擊——藍牙面試核心考點精解

一、SMP 核心知識點高頻考點解析1.1 SMP 在藍牙安全體系中的定位考點&#xff1a;SMP 的功能與協議棧位置解析&#xff1a; SMP&#xff08;Security Manager Protocol&#xff0c;安全管理協議&#xff09;是藍牙核心規范中負責設備配對、密鑰生成與安全連接的關鍵協議&#x…

U盤實現——U 盤類特殊命令

文章目錄 U 盤類特殊命令U 盤的命令封包命令階段數據階段狀態階段get max luninquiry(0x12)read format capacities(0x23)read capacity(0x25)mode sense(0x1a)test unit ready(0x00)read(10) 0x28write(10) 0x2aU 盤類特殊命令 U 盤的命令封包 命令階段 命令階段主要由主機通…

深度帖:瀏覽器的事件循環與JS異步

一、瀏覽器進程 早期的瀏覽器是單進程的&#xff0c;所有功能雜糅在一個進程中&#xff1b;現在的瀏覽器是多進程的&#xff0c;包含瀏覽器進程、網絡進程、渲染進程等等&#xff0c;每個進程負責的工作不同。瀏覽器進程&#xff1a;負責界面顯示&#xff08;地址欄、書簽、歷史…

Linux網絡:UDP socket創建流程與簡單通信

本文介紹 UDP 服務端與客戶端 的創建流程&#xff0c;和相關的函數接口 核心流程 創建 socket → socket()填寫服務器地址信息 → sockaddr_in 結構體綁定地址和端口 → bind()接收并響應客戶端數據 → recvfrom() / sendto()socket() #include<sys/so…

windows內核研究(系統調用 1)

WindowsAPI函數的調用過程什么是WindowsApi&#xff1f;Windows API&#xff08;Application Programming Interface&#xff0c;應用程序編程接口&#xff09;是微軟為Windows操作系統提供的一套系統級編程接口&#xff0c;允許開發者與操作系統內核、硬件、系統服務等進行交互…

【前端】異步任務風控驗證與輪詢機制技術方案(通用筆記版)

一、背景場景 在某類生成任務中&#xff0c;例如用戶點擊“執行任務”按鈕后觸發一個較耗時的后端操作&#xff08;如生成報告、渲染圖像、轉碼視頻等&#xff09;&#xff0c;由于其調用了模型、渲染服務或需要較長處理時間&#xff0c;為了防止接口被頻繁惡意調用&#xff0c…

Vim 編輯器常用操作詳解(新手快速上手指南)

&#x1f4bb; Vim 編輯器常用操作詳解&#xff08;新手快速上手指南&#xff09;作者&#xff1a;Lixin 日期&#xff1a;2025-07-09 學習內容&#xff1a;Vim 編輯器基礎 常用快捷鍵 Xshell/Xftp連接 Linux基本操作 學習目標&#xff1a;掌握 Vim 的三種常用模式切換與基本…

OpenGL 生成深度圖與點云

文章目錄 一、簡介二、實現代碼三、實現效果一、簡介 這里基于OpenGL實現對一個Mesh對象深度圖的獲取,思路其實很簡單,直接通過glReadPixels函數獲取整個OpenGL中的深度緩沖數據即可;那么反過來我們如果有了這個深度圖之后,也可以基于每個像素點的深度值,反算出圖像中的深…

25春云曦期末考復現

Web 瘋狂星期四 <?php$tg1u$_GET[tg1u];if(!preg_match("/0|1|[3-9]|\~|\|\|\#|\\$|\%|\^|\&|\*|\&#xff08;|\&#xff09;|\-|\|\|\{|\[|\]|\}|\:|\|\"|\,|\<|\.|\>|\/|\?|\\\\|localeconv|pos|current|print|var|dump|getallheaders|get|define…

從Prompt到預訓練:掌握大模型核心技術的階梯式進化

本文較長&#xff0c;建議點贊收藏&#xff0c;以免遺失。更多AI大模型應用開發學習視頻及資料&#xff0c;盡在聚客AI學院。 在探討大模型&#xff08;LLM&#xff09;的四階段技術時&#xff0c;我們可以從Prompt Engineering&#xff08;提示工程&#xff09;、AI Agent&…