7#include <boost/redis/connection.hpp>
8#include <boost/asio/detached.hpp>
9#include <boost/asio/co_spawn.hpp>
14#if defined(BOOST_ASIO_HAS_CO_AWAIT)
16namespace asio = boost::asio;
23using boost::asio::awaitable;
24using boost::asio::detached;
25using boost::asio::consign;
28std::ostream&
operator<<(std::ostream& os, std::optional<T>
const& opt)
31 std::cout << opt.value();
38void print(std::map<std::string, std::string>
const& cont)
40 for (
auto const& e: cont)
41 std::cout << e.first <<
": " << e.second <<
"\n";
45void print(std::vector<T>
const& cont)
47 for (
auto const& e: cont) std::cout << e <<
" ";
52auto store(std::shared_ptr<connection> conn) -> awaitable<void>
57 std::map<std::string, std::string>
map
58 {{
"key1",
"value1"}, {
"key2",
"value2"}, {
"key3",
"value3"}};
61 req.push_range(
"RPUSH",
"rpush-key", vec);
62 req.push_range(
"HSET",
"hset-key", map);
63 req.push(
"SET",
"key",
"value");
65 co_await conn->async_exec(req, ignore);
68auto hgetall(std::shared_ptr<connection> conn) -> awaitable<void>
72 req.push(
"HGETALL",
"hset-key");
75 response<std::map<std::string, std::string>> resp;
78 co_await conn->async_exec(req, resp);
80 print(std::get<0>(resp).value());
83auto mget(std::shared_ptr<connection> conn) -> awaitable<void>
87 req.push(
"MGET",
"key",
"non-existing-key");
90 response<std::vector<std::optional<std::string>>> resp;
93 co_await conn->async_exec(req, resp);
95 print(std::get<0>(resp).value());
99auto transaction(std::shared_ptr<connection> conn) -> awaitable<void>
103 req.push(
"LRANGE",
"rpush-key", 0, -1);
104 req.push(
"HGETALL",
"hset-key");
105 req.push(
"MGET",
"key",
"non-existing-key");
114 std::optional<std::vector<int>>,
115 std::optional<std::map<std::string, std::string>>,
116 std::optional<std::vector<std::optional<std::string>>>
120 co_await conn->async_exec(req, resp);
122 print(std::get<0>(std::get<4>(resp).value()).value().value());
123 print(std::get<1>(std::get<4>(resp).value()).value().value());
124 print(std::get<2>(std::get<4>(resp).value()).value().value());
128awaitable<void> co_main(config cfg)
130 auto conn = std::make_shared<connection>(
co_await asio::this_coro::executor);
131 conn->async_run(cfg, {}, consign(detached, conn));
133 co_await store(conn);
134 co_await transaction(conn);
135 co_await hgetall(conn);
A basic_connection that type erases the executor.
ignore_t ignore
Global ignore object.
auto operator<<(std::ostream &os, type t) -> std::ostream &
Writes the type to the output stream.
std::decay_t< decltype(std::ignore)> ignore_t
Type used to ignore responses.
std::tuple< adapter::result< Ts >... > response
Response with compile-time size.
Configure parameters used by the connection classes.