基于Redis实现的基础数据库,方便将redis数据库当成普通数据库使用。它提供了一个灵活的接口来处理Redis操作,支持单机、集群和哨兵模式,并实现了数据插入、查询和监听等功能。
RedisManager
是这个模块的核心结构,它包含以下主要字段:
client
: Redis客户端recordDuration
: 记录保持时间recordLimit
: 记录限制数量pipelineBufferSize
: 管道缓冲大小pipelineCounter
: 管道计数器dbname
: 数据库名称
使用 DB()
函数获取 RedisManager
的单例实例:
redisManager := redisdb.DB()
Redis配置通过 redisOptions
结构体进行设置,主要包括:
Mode
: Redis模式(single/cluster/sentinel)SentinelMasterName
: Sentinel模式下的主节点名称Addr
: Redis服务器地址DB
: Redis数据库编号UserName
: Redis用户名Password
: Redis密码PoolSize
: 连接池大小RecordDuration
: 记录的有效时间RecordLimit
: 记录的条数限制PipelineBufferSize
: 管道缓冲大小
err := redisManager.InsertData(ctx, key, data, buffer)
ctx
: 上下文key
: 数据的键data
: 要插入的数据buffer
: 是否使用缓冲处理
err := redisManager.InsertBatchData(ctx, key, data)
data
: 要批量插入的数据切片
data, err := redisManager.GetData(ctx, key)
data, err := redisManager.GetDataByLatest(ctx, key)
data, total, currentPage, err := redisManager.GetDataByPage(ctx, deviceKey, pageNum, pageSize, types, dateRange)
deviceKey
: 设备键pageNum
: 页码pageSize
: 每页大小types
: 类型过滤dateRange
: 日期范围过滤
redisManager.ListenForNewData(ctx, key, processor, interval)
processor
: 处理新数据的函数interval
: 轮询间隔
所有的方法都返回错误,开发者应该妥善处理这些错误。例如:
if err := redisManager.InsertData(ctx, key, data, false); err != nil {
log.Printf("Failed to insert data: %v", err)
// 处理错误...
}
- 使用单例模式获取
RedisManager
实例,避免多次创建连接池。 - 合理设置
RecordDuration
和RecordLimit
,避免存储过多无用数据。 - 在高并发场景下,考虑使用
InsertBatchData
和缓冲处理来提高性能。 - 使用
ListenForNewData
进行实时数据处理时,选择合适的轮询间隔。 - 在应用退出时,确保正确关闭Redis连接。
- 这个模块使用了前缀
deviceCacheData:
来标识设备数据缓存,使用时需要注意避免键名冲突。 - 在集群模式下,需要确保所有相关的Redis操作都在同一个槽(slot)中执行。
- 使用 Sentinel 模式时,需要正确配置主节点名称和哨兵地址。
- 数据插入使用了 Redis 的列表结构,查询时需要注意数据的顺序。
这个Redis数据库管理模块提供了一个强大而灵活的接口来处理设备数据的存储和检索。通过合理使用这些功能,开发人员可以轻松地在应用中集成Redis数据库操作,实现高效的数据管理和实时处理。