跳转至

RedisUtils 接口文档

简介

简述:该文件提供了基于Redis的通信工具类,用于无人机仿真场景下的数据订阅回调处理,为RflySimSDK的通信模块提供Redis数据交互支撑。

在RflySim无人机仿真系统中,多个模块需要进行高效的跨进程数据交互,Redis作为高性能内存数据存储,常被用于无人机仿真中实时飞行数据、状态信息、传感器数据的中转分发。本模块封装了Redis通信的常用操作,并且提供了订阅回调的处理能力,适用于仿真环境下不同组件之间获取实时飞行数据、感知其他模块状态、响应数据更新的场景,可以帮助开发者快速搭建基于Redis的仿真数据通信链路,无需自行处理Redis连接、订阅回调的底层逻辑。

快速开始

以下示例使用 Redis 键值接口写入并读取无人机状态。运行前需要启动 RflySim 配套的 Redis 服务。

参考例程:[RflySim安装路径]\RflySimAPIs\9.RflySimComm\2.AdvExps\e1.CoaGraNetSimExps\3.Redis\e1.2-KeyValueComm

import RedisUtils


redisConnect = RedisUtils.RedisUtils()

uavState = {
    "CopterID": 1,
    "uavTimeStmp": 0.0,
    "uavPosNED": [0.0, 0.0, -10.0],
    "uavVelNED": [0.0, 0.0, 0.0],
}

# 以 UAV1 为键保存结构化数据
redisConnect.set_data("UAV1", uavState)

# 其他进程可使用相同键主动读取最新状态
data = redisConnect.get_data("UAV1")
if data is not False:
    print(data)

环境与依赖

  • Python 环境>= 3.8.10
  • 依赖库jsonredisthreadingtime
  • 前置准备:调用此接口前,必须确保Redis服务正常运行并完成相关连接配置。

核心接口说明

该模块 RedisUtils.py 包含了配置变量、辅助函数及核心业务类。

全局常量与枚举定义

本节列出模块中所有可直接引用的全局常量和枚举定义。

独立常量


全局/独立函数

sub_callback(channel, data)

功能说明:消息订阅回调函数,用于处理对应通道接收到的消息数据,通常作为订阅接口的回调参数使用。 参数列表

  • channel: 接收到消息的通道标识,指定该数据来源的通道
  • data: 对应通道接收到的消息数据,为通道传输的实际内容

返回值

异常: 无


RedisUtils

Redis工具类,用于提供Redis连接与数据操作相关的工具能力,隶属于RflySimSDK通信模块。

__init__()

功能说明:初始化Redis工具类实例。 参数列表 (Args): 无 返回值 (Returns):无 异常 (Raises):无

set_data(key, data)

功能说明:向Redis存储指定键的序列化数据 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
key 任意 Redis存储数据的键名
data 任意 需要存储的数据,会自动序列化

返回值 (Returns):无返回值 异常 (Raises):无


set_singledata(key, data)

功能说明:向Redis存储指定键的原始字符串数据 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
key 任意 Redis存储数据的键名
data str 需要存储的原始字符串数据

返回值 (Returns):无返回值 异常 (Raises):无


get_data(key)

功能说明:从Redis获取指定键的反序列化数据 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
key 任意 Redis存储数据的键名

返回值 (Returns):反序列化后的原始数据,键不存在时返回None 异常 (Raises):无


get_singledata(key)

功能说明:从Redis获取指定键的原始字符串数据 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
key 任意 Redis存储数据的键名

返回值 (Returns):原始字符串数据,键不存在时返回None 异常 (Raises):无


get_data_list()

功能说明:获取当前Redis数据库中所有键名列表 参数列表 (Args):无参数 返回值 (Returns):包含所有键名的列表 异常 (Raises):无


del_data(key)

功能说明:删除Redis中指定键的数据 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
key 任意 需要删除的Redis数据键名

返回值 (Returns):无返回值 异常 (Raises):无


key_count()

功能说明:统计当前Redis数据库中的键总数 参数列表 (Args):无参数 返回值 (Returns):当前数据库中键的数量 异常 (Raises):无


clear_db()

功能说明:清空当前Redis数据库中的所有数据 参数列表 (Args):无参数 返回值 (Returns):无返回值 异常 (Raises):无


insert_data(db, data)

功能说明:向指定Redis列表队列尾部插入数据 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
db str Redis列表队列的键名
data 任意 需要插入队列的数据

返回值 (Returns):插入操作后队列的长度 异常 (Raises):无


get_one_data(db)

功能说明:从指定Redis列表队列头部取出一条数据 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
db str Redis列表队列的键名

返回值 (Returns):取出的数据,队列为空时返回None 异常 (Raises):无


get_all_data(db)

功能说明:获取指定Redis列表队列中的所有数据 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
db str Redis列表队列的键名

返回值 (Returns):包含队列所有数据的列表 异常 (Raises):无


queue_count(db)

功能说明:获取指定Redis列表队列的数据长度 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
db str Redis列表队列的键名

返回值 (Returns):队列中数据的数量 异常 (Raises):无


clear_queue(db)

功能说明:清空指定Redis列表队列的所有数据 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
db str Redis列表队列的键名

返回值 (Returns):无返回值 异常 (Raises):无


pub_data(key, data)

功能说明:向指定Redis频道发布序列化后的消息 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
key 任意 Redis发布订阅的频道名
data 任意 需要发布的消息数据,会自动序列化

返回值 (Returns):无返回值 异常 (Raises):无


pub_singledata(key, data)

功能说明:向指定Redis频道发布原始字符串消息 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
key 任意 Redis发布订阅的频道名
data str 需要发布的原始字符串消息

返回值 (Returns):无返回值 异常 (Raises):无

sub_data(message_type, channel, callback)

功能说明:订阅指定Redis通道的多数据消息,消息到达时触发指定回调函数处理 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
message_type - 订阅消息的数据类型,用于解析接收到的消息
channel - 要订阅的Redis通道名称
callback - 消息到达时触发的回调函数,参数为解析后的消息

返回值 (Returns):无返回值 异常 (Raises):无


sub_singledata(message_type, channel, callback)

功能说明:订阅指定Redis通道的单数据消息,消息到达时触发指定回调函数处理 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
message_type - 订阅消息的数据类型,用于解析接收到的消息
channel - 要订阅的Redis通道名称
callback - 消息到达时触发的回调函数,参数为解析后的消息

返回值 (Returns):无返回值 异常 (Raises):无


sub_data_multiple_channels(message_type, channels, callback)

功能说明:同时订阅多个Redis通道的多数据消息,任意通道有消息到达时触发指定回调函数处理 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
message_type - 订阅消息的数据类型,用于解析接收到的消息
channels - 要订阅的Redis通道名称列表,包含多个待订阅通道
callback - 消息到达时触发的回调函数,参数为解析后的消息、来源通道信息

返回值 (Returns):无返回值 异常 (Raises):无


sub_singledata_multiple_channels(message_type, channels, callback)

功能说明:同时订阅多个Redis通道的单数据消息,任意通道有消息到达时触发指定回调函数处理 参数列表 (Args)

参数名 类型 是否必填 默认值 说明
message_type - 订阅消息的数据类型,用于解析接收到的消息
channels - 要订阅的Redis通道名称列表,包含多个待订阅通道
callback - 消息到达时触发的回调函数,参数为解析后的消息、来源通道信息

返回值 (Returns):无返回值 异常 (Raises):无

进阶用法示例

以下示例组合使用发布订阅和键值读写:订阅线程接收多机状态,回调函数将汇总结果写回 Redis。

参考例程:[RflySim安装路径]\RflySimAPIs\9.RflySimComm\1.BasicExps\e4.RedisUAVsCommExps\2.NetSimMini_redis_nomat

import threading
import time

import RedisUtils


redisConnect = RedisUtils.RedisUtils()
uavData = {}


def sub_callback(channel, data):
    uavData[channel] = data
    print("收到", channel, data)

    # 收齐三架无人机后,将位置汇总写入普通键值
    if len(uavData) == 3:
        positions = [uavData[key]["uavPosNED"] for key in sorted(uavData)]
        redisConnect.set_data("UavPositions", positions)


channels = ["UAV2", "UAV3", "UAV4"]
subThread = threading.Thread(
    target=redisConnect.sub_data_multiple_channels,
    args=("message", channels, sub_callback),
)
subThread.start()
time.sleep(0.5)

# 发布本机状态;其他无人机使用各自的频道名称
redisConnect.pub_data(
    "UAV1",
    {"CopterID": 1, "uavPosNED": [0.0, 0.0, -10.0]},
)

注意事项与避坑指南

  • 区分批量与单键操作方法set_singledata/get_singledata针对单个独立键值对操作,set_data/get_data针对列表类集合数据操作,混用会导致数据结构异常,无法正常读取结果。
  • 清空数据库风险提示:调用clear_db会直接清空当前所选Redis库的所有键值,包含RflySim仿真核心存储的飞行器状态、配置信息,仅在自定义数据任务完全结束后调用,仿真运行过程中禁止使用该方法。
  • 空值返回处理:当查询的键不存在时,get_singledataget_one_data会返回None,直接对返回结果做属性或索引访问会引发空指针异常,使用前必须增加非空判断逻辑。
  • 批量插入的键重复问题insert_data是向已有列表中追加数据,若需要覆盖原有列表内容,应先调用del_data删除旧键,再执行插入,否则会出现新旧数据混合的错误。

更新日志

  • 2025-05-29: fix:更新平台协议汇总页面