RDConnector Redis 连接
C++ 后端服务器框架RDConnector Redis 连接
CHAPTER 10

RDConnector Redis 连接

2 分钟阅读 · 459 字

对应文件:

  • 接口:include/RDConnector.h
  • 实现:src/RDConnector.cpp

1. 模块定位

RdConnector 是 Redis 轻量连接器,提供基础 KV 接口:

  • connect
  • get
  • set
  • set(key, value, expireSeconds)(SETEX)
  • exists
  • del
  • getError

底层基于 hiredis 的 redisContext 与 redisCommand。

2. 连接与单例语义

模块含静态指针 instance_,行为是“首个成功连接实例注册为全局实例”:

  • connect() 中检查 instance_ != nullptr && instance_ != this 会拒绝
  • 成功连接后若 instance_ == nullptr 则设置为当前对象
  • getInstance() 仅返回 instance_,不负责创建

这是“约束单实例”的轻量模式,不是严格工厂式单例。

3. 核心函数实现

3.1 connect()

流程:

  1. 校验实例唯一性
  2. 清理旧 context
  3. 解析端口 std::stoi
  4. redisConnect(host, port)
  5. 若配置密码则执行 AUTH
  6. 若 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 等批量接口
  • 明确线程安全策略(每线程连接或连接池借还)
全部章节