CHAPTER 10
RDConnector Redis 连接
对应文件:
- 接口:
include/RDConnector.h - 实现:
src/RDConnector.cpp
1. 模块定位
RdConnector 是 Redis 轻量连接器,提供基础 KV 接口:
connectgetsetset(key, value, expireSeconds)(SETEX)existsdelgetError
底层基于 hiredis 的 redisContext 与 redisCommand。
2. 连接与单例语义
模块含静态指针 instance_,行为是“首个成功连接实例注册为全局实例”:
connect()中检查instance_ != nullptr && instance_ != this会拒绝- 成功连接后若
instance_ == nullptr则设置为当前对象 getInstance()仅返回instance_,不负责创建
这是“约束单实例”的轻量模式,不是严格工厂式单例。
3. 核心函数实现
3.1 connect()
流程:
- 校验实例唯一性
- 清理旧
context - 解析端口
std::stoi redisConnect(host, port)- 若配置密码则执行
AUTH - 若
db != 0执行SELECT db
3.2 get(key)
- 执行
GET - 支持
REDIS_REPLY_STRING和REDIS_REPLY_NIL - 错误或异常类型返回空字符串
3.3 set(key, value)
- 执行
SET - 期望
REDIS_REPLY_STATUS且reply->str == "OK"
3.4 set(key, value, expireSeconds)
- 参数校验
expireSeconds > 0 - 执行
SETEX key ttl value
3.5 exists(key)
- 执行
EXISTS - 期望
REDIS_REPLY_INTEGER reply->integer == 1返回 true
3.6 del(key)
- 执行
DEL - 只要回复类型合理视为成功(键不存在也可视作成功删除)
4. 错误模型
- 主要通过
std::cerr输出错误 getError()返回context->errstr或“未初始化连接”
5. 优点与限制
优点:
- 接口简单,适合快速集成缓存功能
- 覆盖基本读写删查
限制:
- 无连接池
- 无超时、重试、断线重连策略
- 默认同步阻塞命令,慢网路下会阻塞调用线程
- 线程安全未在模块内显式保证
6. 改进建议
- 使用 Redis 连接池 + 健康检查
- 增加命令超时与自动重连
- 增加 pipeline / mget 等批量接口
- 明确线程安全策略(每线程连接或连接池借还)