1#ifndef MSTL_DATABASE_REDIS_CONNECT_HPP__
2#define MSTL_DATABASE_REDIS_CONNECT_HPP__
3#ifdef MSTL_SUPPORT_REDIS__
4#include "../../core/config/undef_cmacro.hpp"
5#include "MSTL/database/db_interface.hpp"
9struct MSTL_API redis_connect final : idb_kv_connect {
11 ::redisContext* context_ =
nullptr;
12 clock_type alive_time_ = 0;
13 mutable string last_error_{};
15 ::redisReply* execute_command(string_view command,
const vector<string_view>& args = {})
const;
16 bool authenticate(
const string& password)
const;
17 bool select_database(
const string& db_index)
const;
18 bool connect_to_host(
const string& host,
uint16_t port,
const string& password,
const string& dbname);
21 redis_connect() =
default;
22 ~redis_connect()
override { close(); }
24 bool connect_to(
const string&,
const string& password,
25 const string& dbname,
const string& host,
26 const uint32_t port,
const string&)
override {
27 return connect_to_host(host, port, password, dbname);
30 bool connect_to(
const db_config& config)
override {
31 return connect_to_host(
39 bool reset_connect(
const db_config& config)
override;
41 MSTL_DEPRECATE_FOR(
"Redis not support setting character sets")
42 bool set_character_set(const
string&) const noexcept
override {
return false; }
44 MSTL_DEPRECATE_FOR(
"Redis not support setting character sets")
45 string_view get_character_set() const noexcept
override {
return ""; }
47 string_view get_error() const noexcept override;
48 uint32_t get_errno() const noexcept
override {
return context_ ? context_->err : 0; }
50 bool update(
const string& sql)
const noexcept override;
51 unique_ptr<idb_kv_result> query(
const string& sql)
const override;
53 bool connected() const noexcept
override {
return context_ !=
nullptr && !context_->err; }
54 bool is_valid() const noexcept override;
56 void close() noexcept override;
57 void refresh_alive() noexcept
override { alive_time_ = std::clock(); }
58 clock_type get_alive() const noexcept
override {
return std::clock() - alive_time_; }
60 bool set(
const string& key,
const string& value)
override;
61 bool setex(
const string& key,
const string& value,
int seconds)
override;
62 unique_ptr<idb_kv_result>
get(
const string& key)
override;
63 bool del(
const string& key)
override;
64 bool exists(
const string& key)
override;
65 bool expire(
const string& key,
int seconds)
override;
67 bool hset(
const string& key,
const string& field,
const string& value)
override;
68 unique_ptr<idb_kv_result> hget(
const string& key,
const string& field)
override;
69 unique_ptr<idb_kv_result> hgetall(
const string& key)
override;
71 bool lpush(
const string& key,
const string& value)
override;
72 bool rpush(
const string& key,
const string& value)
override;
73 unique_ptr<idb_kv_result> lrange(
const string& key,
int start,
int stop)
override;
75 bool sadd(
const string& key,
const string& member)
override;
76 unique_ptr<idb_kv_result> smembers(
const string& key)
override;
79class MSTL_API redis_factory final :
public idb_factory {
81 explicit redis_factory(db_config config)
84 idb_connect* create_connect()
override;
85 idb_result* create_result(
void* native_result)
override;
MSTL_ALWAYS_INLINE enable_if_t< is_void_v< T >, future_result_t< T > > get(future< T > &f)
通用future结果获取函数
unsigned int uint32_t
32位无符号整数类型
unsigned short uint16_t
16位无符号整数类型
duration< int64_t > seconds
秒持续时间
#define _MSTL
全局命名空间MSTL前缀
#define MSTL_END_NAMESPACE__
结束全局命名空间MSTL
#define MSTL_BEGIN_NAMESPACE__
开始全局命名空间MSTL
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result)
移动范围元素