-
-
Notifications
You must be signed in to change notification settings - Fork 1.1k
CHN 17 Redis
Martin Chang edited this page Jun 5, 2021
·
7 revisions
Drogon 支持 Redis,Redis是一种非常快速的内存数据存储。 可以用作数据库缓存或消息代理。 与 Drogon 中其他原建一樣,Redis的操作是异步的。 这确保了 Drogon 即使在重负载下也能以非常高的并发性运行。
Redis 支持依赖于hiredis 库。 如果在构建 Drgon 时hiredis 不可用,则Redis支持将不可用。
Redis 客户端可以通过以下方式以方式创建:
app().createRedisClient("127.0.0.1", 6379);
...
// After app.run()
RedisClientPtr redisClient = app().getRedisClient();
execCommandAsync 以异步方式执行 Redis 命令。 它至少需要3个参数,第一个和第二个是在Redis命令成功或失败时调用的回调。 第三是命令本身。 该命令可以是C风格的格式字符串。 其余部分是格式字符串的参数。 例如,要设置 name
為 drogon
:
redisClient->execCommandAsync(
[](const drogon::nosql::RedisResult &r) {}
[](const std::exception &err) {
LOG_ERROR << "something failed!!! " << e.what();
},
"set name drogon");
或者将 myid
设置为 587d-4709-86e4
redisClient->execCommandAsync(
[](const drogon::nosql::RedisResult &r) {}
[](const std::exception &err) {
LOG_ERROR << "something failed!!! " << e.what();
},
"set myid %s", "587d-4709-86e4");
同样的 execCommandAsync 也可以从 Redis 取得数据。
redisClient->execCommandAsync(
[](const drogon::nosql::RedisResult &r) {
if (r.type() == RedisResultType::kNull)
LOG_INFO << "Cannot find variable associated with the key 'name'";
else
LOG_INFO << "Name is " << r.asString();
}
[](const std::exception &err) {
LOG_ERROR << "something failed!!! " << e.what();
},
"get name");
Redis 事务允许在一个步骤中执行多个命令。 事务中的所有命令都按顺序执行,其他客户端的命令不会在事务中间执行。 并且事务是原子操作。 这意味着要么执行所有操作,要么出现问题并且在执行事务之前回滚所有内容。
newTransactionAsync 方法创建一个新事务。 然后就可以像普通的 RedisClient 一样使用事务。 最后,RedisTransaction::execute 方法执行事务。
redisClient->newTransactionAsync([](const RedisTransactionPtr &transPtr) {
transPtr->execCommandAsync(
[](const drogon::nosql::RedisResult &r) { /* this command works */ }
[](const std::exception &err) { /* this command failed */ },
"set name drogon");
transPtr->execute(
[](const drogon::nosql::RedisResult &r) { /* transaction worked */ },
[](const std::exception &err) { /* transaction failed */ });
});
- Overview
- Install drogon
- Quick Start
- Controller
- Middleware and Filter
- View
- Session
- Database
- References
- Plugins
- Configuration File
- drogon_ctl Command
- AOP
- Benchmarks
- Coz profiling
- Brotli info
- Coroutines
- Redis
- Testing Framework
- FAQ