Apollo 技术文档Apollo 技术文档
指南
  • 架构概述
  • BigWorld 架构深度解析
  • BigWorld 进程架构与玩家生命周期
  • AOI九宫格系统详解
  • AOI广播与消息去重
  • Base 模块
  • Core 模块
  • Runtime 模块
  • Data 模块
  • Network 模块
  • /modules/actor.html
  • Game 模块
  • BigWorld 模块
服务器应用
API 参考
QA
GitHub
指南
  • 架构概述
  • BigWorld 架构深度解析
  • BigWorld 进程架构与玩家生命周期
  • AOI九宫格系统详解
  • AOI广播与消息去重
  • Base 模块
  • Core 模块
  • Runtime 模块
  • Data 模块
  • Network 模块
  • /modules/actor.html
  • Game 模块
  • BigWorld 模块
服务器应用
API 参考
QA
GitHub
  • Base 模块
  • Core 模块
  • Runtime 模块
  • Data 模块
  • Network 模块
  • /modules/actor.html
  • Game 模块
  • BigWorld 模块

Data 模块

Data 模块提供数据访问层,支持 MySQL、Redis 等多种数据存储。

ORM

数据库 ORM 映射。

#include <apollo/data/orm/session.hpp>
#include <apollo/data/orm/query.hpp>

using namespace apollo::data::orm;

// 定义实体
class Player : public Entity<Player> {
public:
    PROPERTY(id, int64_t).primary().autoIncrement();
    PROPERTY(name, std::string).notNull();
    PROPERTY(level, int).defaultValue(1);
    PROPERTY(exp, int64_t).defaultValue(0);
};

// 使用 ORM
auto session = SessionFactory::create("mysql://localhost:3306/apollo");

// 插入
Player player;
player.name = "Player1";
player.level = 10;
session.insert(player);

// 查询
auto players = session.query<Player>()
    .where("level > ?", 5)
    .orderBy("exp DESC")
    .limit(10)
    .list();

// 更新
session.update<Player>()
    .set("exp = exp + ?", 100)
    .where("id = ?", player.id)
    .execute();

// 删除
session.delete<Player>()
    .where("level < ?", 10)
    .execute();

Redis

Redis 客户端。

#include <apollo/data/redis/client.hpp>

using namespace apollo::data::redis;

// 连接
auto redis = RedisClient::create("tcp://127.0.0.1:6379");

// 字符串操作
redis->set("key", "value");
auto value = redis->get("key");

// 哈希操作
redis->hset("player:12345", "level", "10");
redis->hset("player:12345", "exp", "1000");
auto level = redis->hget("player:12345", "level");

// 列表操作
redis->lpush("queue", "item1");
redis->lpush("queue", "item2");
auto item = redis->rpop("queue");

// 集合操作
redis->sadd("online_players", "12345");
redis->sadd("online_players", "67890");
auto members = redis->smembers("online_players");

连接池

数据库连接池。

#include <apollo/data/orm/connection_pool.hpp>

// 配置连接池
ConnectionPoolConfig config;
config.host = "localhost";
config.port = 3306;
config.database = "apollo";
config.username = "root";
config.password = "123456";
config.minConnections = 5;
config.maxConnections = 20;

// 创建连接池
auto pool = ConnectionPool::create(config);

// 获取连接
auto conn = pool->getConnection();
// 使用连接...
// 连接自动归还到池中

缓存

缓存抽象层。

#include <apollo/data/cache/cache.hpp>

using namespace apollo::data::cache;

// 创建缓存
auto cache = Cache::create("redis://localhost");

// 设置缓存
cache->put("player:12345", playerData, 3600);  // 1小时过期

// 获取缓存
auto data = cache->get("player:12345");
if (!data) {
    // 缓存未命中,从数据库加载
    playerData = loadFromDatabase(12345);
    cache->put("player:12345", playerData, 3600);
}

// 删除缓存
cache->remove("player:12345");

依赖

  • apollo::core
  • apollo::base

链接

find_package(apollo-data-core REQUIRED)
find_package(apollo-data-orm REQUIRED)
find_package(apollo-data-redis REQUIRED)

target_link_libraries(my_app
    apollo::data_core
    apollo::data_orm
    apollo::data_redis
)
在 GitHub 上编辑此页
最后更新: 3/20/26, 6:06 AM
贡献者: cuihairu
Prev
Runtime 模块
Next
Network 模块