acl  3.5.3.0
redis_transaction.hpp
浏览该文件的文档.
1 #pragma once
2 #include "../acl_cpp_define.hpp"
3 #include <vector>
4 #include "../stdlib/string.hpp"
5 #include "redis_command.hpp"
6 
7 #if !defined(ACL_CLIENT_ONLY) && !defined(ACL_REDIS_DISABLE)
8 
9 namespace acl
10 {
11 
13 {
14 public:
15  /**
16  * see redis_command::redis_command()
17  */
18  redis_transaction(void);
19 
20  /**
21  * see redis_command::redis_command(redis_client*)
22  */
24 
25  /**
26  * see redis_command::redis_command(redis_client_cluster*)
27  */
29 
31 
33  redis_transaction(redis_client_cluster* cluster, size_t max_conns);
34 
35  virtual ~redis_transaction(void);
36 
37  /////////////////////////////////////////////////////////////////////
38 
39  /**
40  * 监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,
41  * 那么事务将被打断
42  * watch the given keys to determine execution of the MULTI/EXEC
43  * block, before EXEC some of the given keys were changed outer,
44  * the transaction will break
45  * @param keys {const std::vector<string>&} key 集合
46  * the given keys collection
47  * @return {bool} 操作是否成功,即使 key 集合中的有 key 不存在也会返回成功
48  * if success of this operation
49  */
50  bool watch(const std::vector<string>& keys);
51 
52  /**
53  * 取消 WATCH 命令对所有 key 的监视
54  * forget about all watched keys
55  * @return {bool} 操作是否成功
56  * if success of this operation
57  */
58  bool unwatch(void);
59 
60  /**
61  * 标记一个事务块的开始,事务块内的多条命令会按照先后顺序被放进一个队列当中,
62  * 最后由 EXEC 命令原子性(atomic)地执行
63  * mark the start of a transaction block
64  * @return {bool} 操作是否成功
65  * if success of this operation
66  */
67  bool multi(void);
68 
69  /**
70  * 执行所有事务块内的命令,假如某个(或某些) key 正处于 WATCH 命令的监视之下,
71  * 且事务块中有和这个(或这些) key 相关的命令,那么 EXEC 命令只在这个(或这些)
72  * key 没有被其他命令所改动的情况下执行并生效,否则该事务被打断(abort);
73  * 在执行本条命令成功后,可以调用下面的 get_size()/get_child() 获得每条命令的
74  * 操作结果
75  * execute all commands issued after MULTI
76  * @return {bool} 操作是否成功
77  * if success of this operation
78  */
79  bool exec(void);
80 
81  /**
82  * 取消事务,放弃执行事务块内的所有命令,如果正在使用 WATCH 命令监视某个(或某些)
83  * key,那么取消所有监视,等同于执行命令 UNWATCH
84  * discard all commands issued after MULTI
85  * @return {bool}
86  */
87  bool discard(void);
88 
89  /**
90  * 在 multi 和 exec 之间可多次调用本函数执行多条 redis 客户端命令
91  * run one command between MULTI and EXEC
92  * @param cmd {const char*} redis 命令
93  * the command
94  * @param argv {const char* []} 参数数组
95  * the args array associate with the command
96  * @param lens [const size_t []} 参数的长度数组
97  * the length array of the args array
98  * @param argc {size_t} 参数数组的长度
99  * the length of the array for args
100  * @return {bool} 操作是否成功
101  * if successful
102  */
103  bool run_cmd(const char* cmd, const char* argv[],
104  const size_t lens[], size_t argc);
105 
106  /**
107  * 在 multi 和 exec 之间多次调用本函数执行多条 redis 客户端命令
108  * run one command between MULTI and exec, this function can be
109  * called more than once
110  * @param cmd {const char*} redis 命令
111  * the redis command
112  * @param args {const std::vector<string>&} 参数数组
113  * the args array for the command
114  * @return {bool} 操作是否成功
115  * if successful
116  */
117  bool run_cmd(const char* cmd, const std::vector<string>& args);
118 
119  /**
120  * 在成功调用 exec 后调用本函数获得操作结果数组的长度
121  * get the result array's length after EXEC
122  * @return {size_t}
123  */
124  size_t get_size(void) const;
125 
126  /**
127  * 获取指定下标的对应的命令的执行结果对象
128  * get the result of the given subscript
129  * @param i {size_t} 命令执行结果在结果数组中的下标
130  * the given subscript
131  * @param cmd {string*} 该参数非空时存放对应的 redis 命令
132  * if not NULL, it will store the command of the given subscript
133  * @return {const redis_result*} 执行某条命令的结果,当 i 越界时返回 NULL
134  * return the result of one command, NULL if i was out of bounds
135  */
136  const redis_result* get_child(size_t i, string* cmd) const;
137 
138  /**
139  * 获得当前事务所重的命令集合
140  * get all the commands issued between MULTI and EXEC
141  * @return {const std::vector<string>&}
142  */
143  const std::vector<string>& get_commands(void) const
144  {
145  return cmds_;
146  }
147 
148 private:
149  std::vector<string> cmds_;
150 };
151 
152 } // namespace acl
153 
154 #endif // !defined(ACL_CLIENT_ONLY) && !defined(ACL_REDIS_DISABLE)
#define ACL_CPP_DEPRECATED
Definition: atomic.hpp:86
const std::vector< string > & get_commands(void) const
#define ACL_CPP_API