跳到主要内容

Redis 缓存架构

核心概念:文档中心 | Redis 缓存架构 | 概览

为了应对高并发的设备请求,规则引擎设计了多级 Redis 缓存结构,尽量减少数据库查询。


核心概念:文档中心 | Redis 缓存架构 | 1. 缓存更新流程 (规则引擎)

1. 缓存更新流程 (规则引擎)

以下是规则引擎缓存更新的流程图:

Mermaid Diagram Code:

graph TD
    subgraph 数据变更源
        A[MAC资源/MAC项变更] -->|触发| H(缓存更新监听器)
        B[渠道关联变更] -->|触发| H
        C[规则属性/地区变更] -->|触发| H
        D[业务绑定变更] -->|触发| H
        E[业务数量限制变更] -->|触发| H
    end

    subgraph Redis缓存更新
        H -->|更新| I["r:m:r:{mac}"]
        I -.->|说明| I_Desc[MAC -> 规则ID集合]
        
        H -->|更新| J["r:c:r:{channel_id}"]
        J -.->|说明| J_Desc[渠道 -> 规则ID集合]
        
        H -->|更新| K["data:base:rule:{rule_id}"]
        K -.->|说明| K_Desc[规则详情 JSON]
        
        H -->|更新| L["r:btype:r:{business_type}"]
        L -.->|说明| L_Desc[业务类型 -> 规则ID集合]
        
        H -->|更新| M["r:r:btype:b:{rule_id}"]
        M -.->|说明| M_Desc[规则 -> 业务ID集合]
        
        H -->|更新| N["r:no:limit:r"]
        N -.->|说明| N_Desc[无限制规则集合]
        
        H -->|更新| O["r:btype:b:limit:{type}"]
        O -.->|说明| O_Desc[业务数量限制 Hash]
    end
    
    style H fill:#f9f,stroke:#333,stroke-width:2px

核心概念:文档中心 | Redis 缓存架构 | 2.1 缓存 Key 设计规范 (规则引擎)

2.1 缓存 Key 设计规范 (规则引擎)

规则引擎的Redis Key设计遵循以下规范。

缓存中的所有mac需要去掉冒号? redis key中遇到b c r等关键字,是bid,cid,rid的简写,btype是业务类型简写。

缓存维度Redis KeyValue 结构说明
MAC -> 规则IDr:m:r:{mac}Set<RuleID>该MAC地址直接关联的规则ID集合
渠道ID -> 规则IDr:c:r:{channel_id}Set<RuleID>该渠道下绑定的规则ID集合
无设备限制-->规则IDr:no:limit:rSet<RuleID>未配置任何渠道或者mac的规则ID集合
渠道ID+业务ID -> 规则IDr:c:btype:r:{channel_id}Hash
Key: {business_type}
Value: Set<RuleID>
优化查询,快速定位特定渠道下某业务类型的规则
业务类型 -> 规则IDr:btype:r:{business_type}Set<RuleID>该业务类型下的所有通用规则ID集合
规则ID+业务类型 -> 业务IDr:r:btype:b:{rule_id}Hash
Key: {business_type}
Value: Set<BusinessID>
规则匹配成功后,反查其对应的业务ID集合
规则ID->规则详情data:base:rule:{rule_id}String (JSON)规则的完整实体信息,需要包含地区ID集合。
业务类型->业务ID->剩余数量限制信息r:btype:b:limit:{business_type}Hash
Key: {business_id}
Value: {limit_count,current_count}
剩余数量限制信息,该缓存在开始的时候可能会出现大量变化,所以更新不能用删除缓存这种操作

核心概念:文档中心 | Redis 缓存架构 | 2.2 缓存更新机制 (规则引擎)

2.2 缓存更新机制 (规则引擎)

系统通过监听数据变更事件来实时更新缓存:

  1. MAC关联变更: 当 rule_mac_resource_item (MAC资源关联MAC表) 或 rule_mac_item (规则关联MAC表) 变动时,更新 r:m:r:{mac} (MAC -> 规则ID)。
  2. 渠道关联变更: 当 rule_channel_item (规则关联渠道表) 变动时,更新 r:c:r:{channel_id} (渠道ID -> 规则ID) 。
  3. 规则属性变更: 当 rule_liteflow_chain (规则定义表) 或 rule_region_item (规则关联地区表)变动时,更新 data:base:rule:{rule_id} (规则ID->规则详情)。
  4. 业务绑定变更: 当 rule_business (规则关联业务表) 变动时,级联更新相关维度的缓存~~,r:c:btype:r:{channel_id} (渠道ID+业务ID -> 规则ID)~~ r:btype:r:{business_type} (业务类型 -> 规则ID) r:r:btype:b:{rule_id} (规则ID+业务类型 -> 业务ID) 。
  5. 数据删除: 删除规则时,删除data:base:rule:{rule_id} (规则ID->规则详情) r:r:btype:b:{rule_id} (规则ID+业务类型 -> 业务ID)。更新操作可选,等缓存自行过期也行,涉及可以更新的缓存,r:c:r:{channel_id} (渠道ID -> 规则ID) r:c:btype:r:{channel_id} (渠道ID+业务ID -> 规则ID)
  6. 特殊场景:当某条规则在编辑完成后不再有关联的mac与渠道时,或者从无关联mac与渠道变为有关联时,更新r:no:limit:r(无设备限制-->规则ID)。
  7. 数量限制变更:当数量限制变化时,更新r:btype:b:limit:{business_type}(业务类型->业务ID->剩余数量限制信息),这个变化是由业务系统触发,规则这边不提供配置和查询页面,current_count变化采用mq解耦发送。
AI 问答