C++ redis-plus-plus中 AsyncRedisCluster类 使用 command 怎么写
时间: 2023-12-10 14:37:59 浏览: 152
redis++使用说明,windows下编译redis-plus-plus
AsyncRedisCluster类的command方法用于发送Redis命令到Redis集群中,其函数原型如下:
```
template <typename Result>
Future<Result> command(Command&& cmd);
```
其中,Command是一个可变参数模板类,表示Redis命令及其参数。例如,发起一个GET命令获取key为"foo"的值,可以这样写:
```
redis.cluster(command<string>("GET", "foo")).then([](string value) {
cout << "GET foo: " << value << endl;
});
```
此外,command方法还支持Redis事务(multi/exec/discard)和管道(pipeline)。
例如,以下代码演示了如何使用事务(multi/exec/discard):
```
redis.cluster().multi()
.command<void>("SET", "foo", "1")
.command<void>("INCR", "foo")
.command<void>("GET", "foo")
.exec()
.then([](vector<OptionalString> result) {
cout << "SET foo 1: " << result[0].isNull() << endl;
cout << "INCR foo: " << result[1].isNull() << endl;
cout << "GET foo: " << result[2].value() << endl;
})
.onError([](const Error& error) {
cerr << "Error: " << error.what() << endl;
});
```
以上代码中,multi()表示开启一个事务,然后通过command方法依次添加命令,最后使用exec方法提交事务。事务执行成功后,then回调函数会收到一个vector对象,其中包含每个命令的返回值。
最后,以下代码演示了如何使用管道(pipeline):
```
redis.cluster().pipeline()
.command<void>("SET", "foo", "1")
.command<void>("INCR", "foo")
.command<void>("GET", "foo")
.exec()
.then([](vector<OptionalString> result) {
cout << "SET foo 1: " << result[0].isNull() << endl;
cout << "INCR foo: " << result[1].isNull() << endl;
cout << "GET foo: " << result[2].value() << endl;
})
.onError([](const Error& error) {
cerr << "Error: " << error.what() << endl;
});
```
以上代码中,pipeline()表示开启一个管道,然后通过command方法依次添加命令,最后使用exec方法提交管道。管道执行成功后,then回调函数会收到一个vector对象,其中包含每个命令的返回值。与事务不同的是,管道中的每个命令是并行执行的,可以显著提高性能。
阅读全文