MSTL 1.4.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
redis_connect.hpp
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"
6#include <hiredis.h>
8
9struct MSTL_API redis_connect final : idb_kv_connect {
10private:
11 ::redisContext* context_ = nullptr;
12 clock_type alive_time_ = 0;
13 mutable string last_error_{};
14
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);
19
20public:
21 redis_connect() = default;
22 ~redis_connect() override { close(); }
23
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);
28 }
29
30 bool connect_to(const db_config& config) override {
31 return connect_to_host(
32 config.host,
33 config.port,
34 config.password,
35 config.database
36 );
37 }
38
39 bool reset_connect(const db_config& config) override;
40
41 MSTL_DEPRECATE_FOR("Redis not support setting character sets")
42 bool set_character_set(const string&) const noexcept override { return false; }
43
44 MSTL_DEPRECATE_FOR("Redis not support setting character sets")
45 string_view get_character_set() const noexcept override { return ""; }
46
47 string_view get_error() const noexcept override;
48 uint32_t get_errno() const noexcept override { return context_ ? context_->err : 0; }
49
50 bool update(const string& sql) const noexcept override;
51 unique_ptr<idb_kv_result> query(const string& sql) const override;
52
53 bool connected() const noexcept override { return context_ != nullptr && !context_->err; }
54 bool is_valid() const noexcept override;
55
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_; }
59
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;
66
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;
70
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;
74
75 bool sadd(const string& key, const string& member) override;
76 unique_ptr<idb_kv_result> smembers(const string& key) override;
77};
78
79class MSTL_API redis_factory final : public idb_factory {
80public:
81 explicit redis_factory(db_config config)
82 : idb_factory(_MSTL move(config)) {}
83
84 idb_connect* create_connect() override;
85 idb_result* create_result(void* native_result) override;
86};
87
89#endif
90#endif // MSTL_DATABASE_REDIS_CONNECT_HPP__
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)
移动范围元素