Jorgen's blog Jorgen's blog
首页
  • 平台架构
  • 混合式开发记录
  • 推送服务
  • 数据分析
  • 实时调度
  • 架构思想

    • 分布式
  • 编程框架工具

    • 编程语言
    • 框架
    • 开发工具
  • 数据存储与处理

    • 数据库
    • 大数据
  • 消息、缓存与搜索

    • 消息队列
    • 搜索与日志分析
  • 前端与跨端开发

    • 前端技术
    • Android
  • 系统与运维

    • 操作系统
    • 容器化与 DevOps
  • 物联网与安全

    • 通信协议
    • 安全
    • 云平台
收藏
  • 关于我
  • 终身学习
  • 关于时间的感悟
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

jorgen

Love it, make mistakes, learn, keep grinding.
首页
  • 平台架构
  • 混合式开发记录
  • 推送服务
  • 数据分析
  • 实时调度
  • 架构思想

    • 分布式
  • 编程框架工具

    • 编程语言
    • 框架
    • 开发工具
  • 数据存储与处理

    • 数据库
    • 大数据
  • 消息、缓存与搜索

    • 消息队列
    • 搜索与日志分析
  • 前端与跨端开发

    • 前端技术
    • Android
  • 系统与运维

    • 操作系统
    • 容器化与 DevOps
  • 物联网与安全

    • 通信协议
    • 安全
    • 云平台
收藏
  • 关于我
  • 终身学习
  • 关于时间的感悟
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 平台架构
  • 技术选型
  • 开发脚手架
  • UI规范
  • 开发规范
  • 代码分支管理模型
  • 需求分析与管理
  • 权限设计
  • 树形组织设计
  • 协议设计
  • 指令交互
  • OTA
  • 规则引擎
  • 数据流转
  • 报告生成与导出
  • 监控设备接入
  • 时序数据库
  • 平台监控
  • 云⛈
  • 接口设计
  • 安全传输
  • CI&CD
  • 缓存
    • 背景
    • 本地缓存
    • Redis
      • 设备信息
      • 用户信息
      • 权限信息
  • 消息处理引擎
  • 性能调优🔥
  • 线上事故🔥
  • 混合式开发记录
  • 推送服务
  • 机器人通信协议
  • 数据分析
  • flink模板工程
  • 实时调度
  • 机器人模块化设计
  • STM32入门
  • 开发日志
Jorgen
2023-02-18
目录

缓存

# 背景

在物联网项目中,缓存的身影总是少不了的。以我的项目为例,我就用了本地缓存,基于ConcurrentHashMap实现;分布式缓存,基于Redis实现。

# 本地缓存

设备与平台连接时,基于Netty,会有一个Channel。平台与设备就基于这个Channel相互进行通信。为了能够更方便的对通道进行管理,我使用了ConcurrentHashMap,简单实现了个本地缓存。

设置缓存: 使用channel获取的远程地址当做key,通道作为值来使用。

private Map<String, Channel> channelMapping = new ConcurrentHashMap<>(16);
1

存放&移除时机:通道激活时,放入缓存;通道关闭时,移除缓存。

    public void channelActive(ChannelHandlerContext ctx) throws Exception {
        String clientIdentify = ctx.channel().remoteAddress().toString();
        log.info("clientIdentify: {} active......", clientIdentify);
        server.getChannelMapping().put(clientIdentify, ctx.channel());
        super.channelActive(ctx);
    }

    public void channelInactive(ChannelHandlerContext ctx) throws Exception {
        String clientIdentify = ctx.channel().remoteAddress().toString();
        server.getChannelMapping().remove(clientIdentify);
        super.channelInactive(ctx);
        log.info("clientIdentify: {} inactive......", clientIdentify);
    }
1
2
3
4
5
6
7
8
9
10
11
12
13

使用:需要对设备发送数据时,单独获取,发送数据。

    public void sendByte(String remoteAddress, byte[] bytes) {
        Channel channel = this.getChannelMapping().get(remoteAddress);
        ByteBuf buf = Unpooled.buffer();
        buf.writeBytes(bytes);
        channel.writeAndFlush(buf);
    }
1
2
3
4
5
6

# Redis

Redis时一个使用 C 语言开发的数据库,不过与传统数据库不同的是 Redis 的数据是存在内存中的 ,也就是它是内存数据库,所以读写速度非常快。

# 设备信息

类型 结构 操作
设备信息 hash 设备影子注释
解释: 设备影子(Device Shadow)是物联网中的一个概念,是指虚拟设备,它代表了实际物理设备的状态和属性,可以在云端或边缘端进行管理和控制。

通常情况下,设备影子由云平台提供,当物理设备连接到云平台时,设备影子会自动创建。设备影子包含了设备的属性、状态、元数据和影子状态等信息。设备影子的状态信息可以与设备进行同步,以便在设备离线时保持其最新状态。在设备重新连接到云平台时,设备影子可以帮助设备进行快速的状态同步。

设备影子的主要作用是提供一个中间层,实现设备和应用程序之间的解耦和互操作。应用程序可以通过设备影子来监控和控制设备状态,而不需要直接与设备进行通信。这种方式使应用程序更加灵活和可靠,并且可以轻松地在不同的设备之间进行迁移和扩展。

设备影子还可以用于数据分析和可视化。通过收集设备影子的数据,可以实时地监控设备的状态和性能,并对其进行分析和可视化。这样可以帮助用户更好地了解设备的工作状态,优化设备的性能,提高设备的可用性和可靠性。

# 用户信息

类型 结构 操作
登录用户信息 string 记录用户的登录信息:浏览器版本、ip、登录时间
在线用户信息 zset 记录在线用户数量。可根据sort对不同类型的用户设置不同的权重

# 权限信息

类型 结构 操作
资源信息 string 记录平台所有的资源
#分布式缓存#本地缓存#Redis
上次更新: 2023/02/19, 11:42:06
CI&CD
消息处理引擎

← CI&CD 消息处理引擎→

最近更新
01
STM32入门
03-09
02
ADB调试
03-09
03
微信小程序学习记录
02-09
更多文章>
Theme by Vdoing | Copyright © 2019-2025 Jorgen | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式