acl  3.5.3.0
redis_zset.hpp
浏览该文件的文档.
1 #pragma once
2 #include "../acl_cpp_define.hpp"
3 #include <vector>
4 #include <map>
5 #include <utility>
6 #include "redis_command.hpp"
7 
8 #if !defined(ACL_CLIENT_ONLY) && !defined(ACL_REDIS_DISABLE)
9 
10 namespace acl
11 {
12 
13 class ACL_CPP_API redis_zset : virtual public redis_command
14 {
15 public:
16  /**
17  * see redis_command::redis_command()
18  */
19  redis_zset(void);
20 
21  /**
22  * see redis_command::redis_command(redis_client*)
23  */
24  redis_zset(redis_client* conn);
25 
26  /**
27  * see redis_command::redis_command(redis_client_cluster*)
28  */
30 
32 
34  redis_zset(redis_client_cluster* cluster, size_t max_conns);
35 
36  virtual ~redis_zset(void);
37 
38  /////////////////////////////////////////////////////////////////////
39 
40  /**
41  * 添加对应 key 的有序集
42  * add one or more members to a sorted set, or update its score if
43  * it already exists
44  * @param key {const char*} 有序集键值
45  * the key of a sorted set
46  * @param members "分值-成员"集合
47  * the set storing values and stores
48  * @return {int} 新成功添加的 "分值-成员" 对的数量
49  * the number of elements added to the sorted set, not including
50  * elements already existing for which the score was updated
51  * 0:表示一个也未添加,可能因为该成员已经存在于有序集中
52  * nothing was added to the sorted set
53  * -1:表示出错或 key 对象非有序集对象
54  * error or it was not a sorted set by the key
55  * >0:新添加的成员数量
56  * the number of elements added
57  */
58  int zadd(const char* key, const std::map<string, double>& members,
59  const std::vector<string>* options = NULL);
60  int zadd(const char* key,
61  const std::vector<std::pair<string, double> >&members);
62  int zadd(const char* key,
63  const std::vector<std::pair<const char*, double> >&members);
64  int zadd(const char* key, const std::vector<string>& members,
65  const std::vector<double>& scores);
66  int zadd(const char* key, const std::vector<const char*>& members,
67  const std::vector<double>& scores);
68  int zadd(const char* key, const char* members[], double scores[],
69  size_t size);
70  int zadd(const char* key, const char* members[], size_t members_len[],
71  double scores[], size_t size);
72 
73  int zadd_with_ch_xx(const char* key, const std::map<string, double>& members);
74  int zadd_with_ch_nx(const char* key, const std::map<string, double>& members);
75 
76  bool zadd_with_incr(const char* key, const char* member, size_t len,
77  double score, double* result = NULL, const char* option = NULL);
78  bool zadd_with_incr(const char* key, const char* member,
79  double score, double* result = NULL, const char* option = NULL);
80  bool zadd_with_incr_xx(const char* key, const char* member,
81  double score, double* result = NULL);
82  bool zadd_with_incr_nx(const char* key, const char* member,
83  double score, double* result = NULL);
84 
85  /**
86  * 获得相应键的有序集的成员数量
87  * get the number of elements in a sorted set
88  * @param key {const char*} 有序集键值
89  * the key of a a sorted set
90  * @return {int} 一个键的有序集的成员数量
91  * the number of elements of the sorted set
92  * 0:该键不存在
93  * the key doesn't exist
94  * -1:出错或该键的数据对象不是有效的有序集对象
95  * error or it wasn't a sorted set by the key
96  * >0:当前键值对应的数据对象中的成员个数
97  * the number of elements in the sorted set
98  */
99  int zcard(const char* key);
100 
101  /**
102  * 获得 key 的有序集中指定分值区间的成员个数
103  * get the number of elements in a sorted set with scores within
104  * the given values
105  * @param key {const char*} 有序集键值
106  * the key of a sorted set
107  * @param min {double} 最小分值
108  * the min score specified
109  * @param max {double} 最大分值
110  * the max socre specified
111  * @return {int} 符合条件的成员个数
112  * the number of elements in specified score range
113  * 0:该键对应的有序集不存在或该 KEY 有序集的对应分值区间成员为空
114  * nothing in the specified score range, or the key doesn't exist
115  * -1: 出错或该键的数据对象不是有效的有序集对象
116  * error or it is not a sorted set by the key
117  */
118  int zcount(const char* key, double min, double max);
119 
120  /**
121  * 将 key 的有序集中的某个成员的分值加上增量 inc
122  * increase the score of a memeber in a sorted set
123  * @param key {const char*} 有序集键值
124  * the key of the sorted set
125  * @param inc {double} 增量值
126  * the value to be increased
127  * @param member {const char*} 有序集中成员名
128  * the specified memeber of a sorted set
129  * @param result {double*} 非空时存储结果值
130  * if not null, it will store the score result after increment
131  * @return {bool} 操作是否成功
132  * if successful about the operation
133  */
134  bool zincrby(const char* key, double inc, const char* member,
135  double* result = NULL);
136  bool zincrby(const char* key, double inc, const char* member,
137  size_t len, double* result = NULL);
138 
139  /**
140  * 从 key 的有序集中获得指定位置区间的成员名列表,成员按分值递增方式排序
141  * get the specified range memebers of a sorted set sotred at key
142  * @param key {const char*} 有序集键值
143  * the key of a sorted set
144  * @param start {int} 起始下标位置
145  * the begin index of the sorted set
146  * @param stop {int} 结束下标位置(结果集同时含该位置)
147  * the end index of the sorted set
148  * @param result {std::vector<string>*} 非空时存储结果集,内部先调用
149  * result.clear() 清除其中的元素
150  * if not NULL, it will store the memebers result
151  * @return {int} 结果集中成员的数量
152  * the number of memebers
153  * 0: 表示结果集为空或 key 不存在
154  * the result is empty or the key doesn't exist
155  * -1: 表示出错或 key 对象非有序集对象
156  * error or it's not a sorted set by the key
157  * >0: 结果集的数量
158  * the number of the memebers result
159  * 注:对于下标位置,0 表示第一个成员,1 表示第二个成员;-1 表示最后一个成员,
160  * -2 表示倒数第二个成员,以此类推
161  * Notice: about the index, element by index 0 is the first
162  * of the sorted set, element by index -1 is the last one.
163  *
164  * 操作成功后可以通过以下任一方式获得数据
165  * when success, the result can be got by one of the below proccess:
166  * 1、在调用方法中传入非空的存储结果对象的地址
167  * the most easily way is to set a non-NULL result parameter
168  * for this function
169  * 2、基类方法 get_value 获得指定下标的元素数据
170  * get the specified subscript's element by redis_command::get_value
171  * 3、基类方法 get_child 获得指定下标的元素对象(redis_result),然后再通过
172  * redis_result::argv_to_string 方法获得元素数据
173  * redis_result::argv_to_string 方法获得元素数据
174  * get redis_result object with the given subscript, and get the
175  * element by redis_result::argv_to_string
176  * 4、基类方法 get_result 方法取得总结果集对象 redis_result,然后再通过
177  * redis_result::get_child 获得一个元素对象,然后再通过方式 2 中指定
178  * 的方法获得该元素的数据
179  * get redis_result object by redis_command::get_result, and get
180  * the first element by redis_result::get_child, then get the
181  * element by the way same as the way 2 above.
182  * 5、基类方法 get_children 获得结果元素数组对象,再通过 redis_result 中
183  * 的方法 argv_to_string 从每一个元素对象中获得元素数据
184  * get child array by redis_command::get_children, and get the
185  * element from one of redis_result array by argv_to_string
186  */
187  int zrange(const char* key, int start, int stop,
188  std::vector<string>* result);
189 
190  /**
191  * 从 key 的有序集中获得指定位置区间的成员名及分值列表,成员按分值递增方式排序
192  * @param key {const char*} 有序集键值
193  * @param start {int} 起始下标位置
194  * @param stop {int} 结束下标位置(结果集同时含该位置)
195  * @param out 存储 "成员名-分值对"结果集,内部先调用 out.clear()
196  * @return {int} 结果集中成员的数量
197  * 0: 表示结果集为空或 key 不存在
198  * -1: 表示出错或 key 对象非有序集对象
199  * >0: 结果集的数量
200  * 注:对于下标位置,0 表示第一个成员,1 表示第二个成员;-1 表示最后一个成员,
201  * -2 表示倒数第二个成员,以此类推
202  */
203  int zrange_with_scores(const char* key, int start, int stop,
204  std::vector<std::pair<string, double> >& out);
205 
206  /**
207  * 返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )
208  * 的成员。有序集成员按 score 值递增(从小到大)次序排列
209  * @param key {const char*} 有序集键值
210  * @param min {double} 最小分值
211  * @param max {double} 最大分值
212  * @param out {std::vector<string>*} 非空时存储“成员名”结果集
213  * @param offset {const int*} 非空时表示结果集的起始下标
214  * @param count {const int*} 非空时表示截取的结果集中成员个数
215  * @return {int} 结果集中成员的数量
216  * 0: 表示结果集为空或 key 不存在
217  * -1: 表示出错或 key 对象非有序集对象
218  * >0: 结果集的数量
219  * 注:offset 和 count 必须同时为非空指针时才有效
220  *
221  * 操作成功后可以通过以下任一方式获得数据
222  * 1、在调用方法中传入非空的存储结果对象的地址
223  * 2、基类方法 get_value 获得指定下标的元素数据
224  * 3、基类方法 get_child 获得指定下标的元素对象(redis_result),然后再通过
225  * redis_result::argv_to_string 方法获得元素数据
226  * 4、基类方法 get_result 方法取得总结果集对象 redis_result,然后再通过
227  * redis_result::get_child 获得一个元素对象,然后再通过方式 2 中指定
228  * 的方法获得该元素的数据
229  * 5、基类方法 get_children 获得结果元素数组对象,再通过 redis_result 中
230  * 的方法 argv_to_string 从每一个元素对象中获得元素数据
231  */
232  int zrangebyscore(const char* key, double min, double max,
233  std::vector<string>* out, const int* offset = NULL,
234  const int* count = NULL);
235 
236  /**
237  * 返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )
238  * 的成员。有序集成员按 score 值递增(从小到大)次序排列
239  * @param key {const char*} 有序集键值
240  * @param min {const char*} 以字符串表示最小分值
241  * @param max {const char*} 以字符串表示最大分值
242  * @param out {std::vector<string>*} 非空时存储“成员名”结果集
243  * @param offset {const int*} 非空时表示结果集的起始下标
244  * @param count {const int*} 非空时表示截取的结果集中成员个数
245  * @return {int} 结果集中成员的数量
246  * 0: 表示结果集为空或 key 不存在
247  * -1: 表示出错或 key 对象非有序集对象
248  * >0: 结果集的数量
249  * 注:
250  * 1)offset 和 count 必须同时为非空指针时才有效
251  * 2)min 和 max 可以是 -inf 和 +inf 来表示无限区间
252  * 3)默认情况下,区间的取值使用闭区间 (小于等于或大于等于),也可以通过给参数前
253  * 增加 ( 符号来使用可选的开区间 (小于或大于),如:
254  * 3.1)"ZRANGEBYSCORE zset (1 5" 返回所有符合条件 1 < score <= 5 的成员
255  * 3.2)"ZRANGEBYSCORE zset (5 (10" 返回所有符合条件 5 < score < 10 的成员
256  *
257  * 操作成功后可以通过以下任一方式获得数据
258  * 1、在调用方法中传入非空的存储结果对象的地址
259  * 2、基类方法 get_value 获得指定下标的元素数据
260  * 3、基类方法 get_child 获得指定下标的元素对象(redis_result),然后再通过
261  * redis_result::argv_to_string 方法获得元素数据
262  * 4、基类方法 get_result 方法取得总结果集对象 redis_result,然后再通过
263  * redis_result::get_child 获得一个元素对象,然后再通过方式 2 中指定
264  * 的方法获得该元素的数据
265  * 5、基类方法 get_children 获得结果元素数组对象,再通过 redis_result 中
266  * 的方法 argv_to_string 从每一个元素对象中获得元素数据
267  */
268  int zrangebyscore(const char* key, const char* min, const char* max,
269  std::vector<string>* out, const int* offset = NULL,
270  const int* count = NULL);
271 
272  /**
273  * 返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )
274  * 的成员及分值。有序集成员按 score 值递增(从小到大)次序排列;分值(min/max)使用
275  * 浮点数表示
276  * @param out 存储结果集,内部先调用 out.clear()
277  * @return {int} 结果集中成员的数量
278  */
279  int zrangebyscore_with_scores(const char* key, double min, double max,
280  std::vector<std::pair<string, double> >& out,
281  const int* offset = NULL, const int* count = NULL);
282 
283  /**
284  * 返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )
285  * 的成员及分值。有序集成员按 score 值递增(从小到大)次序排列;分值(min/max)使用
286  * 字符串表示
287  * @param out 存储结果集,内部先调用 out.clear()
288  * @return {int} 结果集中成员的数量
289  */
290  int zrangebyscore_with_scores(const char* key, const char* min,
291  const char* max, std::vector<std::pair<string, double> >& out,
292  const int* offset = NULL, const int* count = NULL);
293 
294  /**
295  * 返回有序集 key 中成员 member 的排名(下标从 0 开始);其中有序集成员按 score
296  * 值递增(从小到大)顺序排列
297  * @param key {const char*} 有序集键值
298  * @param member {const char*} 成员名
299  * @param len {size_t} member 的长度
300  * @return {int} 下标位置值,-1 -- 出错,或 key 非有序集对象,或成员名不存在
301  */
302  int zrank(const char* key, const char* member, size_t len);
303  int zrank(const char* key, const char* member);
304 
305  /**
306  * 从有序集中删除某个成员
307  * @param key {const char*} 有序集键值
308  * @param first_member {const char*} 要删除的成员列表的第一个
309  * @return {int} 成功删除的成员的数量,-1 表示出错或该 key 非有序集对象,
310  * 0 表示该有序集不存在或成员不存在,> 0 表示成功删除的成员数量
311  */
312  int zrem(const char* key, const char* first_member, ...);
313  int zrem(const char* key, const std::vector<string>& members);
314  int zrem(const char* key, const std::vector<const char*>& members);
315  int zrem(const char* key, const char* members[], const size_t lens[],
316  size_t argc);
317 
318  /**
319  * 移除有序集 key 中,指定排名(rank)区间内的所有成员;
320  * 区间分别以下标参数 start 和 stop 指出,包含 start 和 stop 在内;
321  * 下标参数 start 和 stop 都以 0 为底,也就是说,以 0 表示有序集第一个成员,
322  * 以 1 表示有序集第二个成员,以此类推;
323  * 也可以使用负数下标,以 -1 表示最后一个成员, -2 表示倒数第二个成员,以此类推
324  * @param key {const char*} 有序集键值
325  * @param start {int} 起始下标位置(从 0 开始)
326  * @param stop {int} 结束下标位置
327  * @return {int} 被移除的成员数量
328  * 0:表示 key 不存在或移除的区间不存在
329  * -1:表示出错或 key 不是有序集合对象键值
330  */
331  int zremrangebyrank(const char* key, int start, int stop);
332 
333  /**
334  * 移除有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )
335  * 的成员;自版本2.1.6开始,score 值等于 min 或 max 的成员也可以不包括在内,
336  * 详情请参见 ZRANGEBYSCORE 命令
337  * @param key {const char*} 有序集键值
338  * @param min {double} 最小分值
339  * @param max {double} 最大分值
340  * @return {int} 成功删除的成员的数量,-1 表示出错或该 key 非有序集对象,
341  * 0 表示该有序集不存在或成员不存在,> 0 表示成功删除的成员数量
342  */
343  int zremrangebyscore(const char* key, double min, double max);
344 
345  /**
346  * 移除有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )
347  * 的成员;自版本2.1.6开始,score 值等于 min 或 max 的成员也可以不包括在内,
348  * 详情请参见 ZRANGEBYSCORE 命令
349  * @param key {const char*} 有序集键值
350  * @param min {const char*} 字符串形式的最小分值,意义参见:zrangebyscore 注释
351  * @param max {const char*} 字符串形式的最大分值
352  * @return {int} 成功删除的成员的数量,-1 表示出错或该 key 非有序集对象,
353  * 0 表示该有序集不存在或成员不存在,> 0 表示成功删除的成员数量
354  */
355  int zremrangebyscore(const char* key, const char* min, const char* max);
356 
357  /**
358  * 从 key 的有序集中获得指定位置区间的成员名列表,成员按分值递减方式排序
359  * @param key {const char*} 有序集键值
360  * @param start {int} 起始下标位置
361  * @param stop {int} 结束下标位置(结果集同时含该位置)
362  * @param result {std::vector<string>*} 非空时存储结果集
363  * 注:对于下标位置,0 表示第一个成员,1 表示第二个成员;-1 表示最后一个成员,
364  * -2 表示倒数第二个成员,以此类推
365  * @return {int} 结果集数量,-1 表示出错
366  */
367  int zrevrange(const char* key, int start, int stop,
368  std::vector<string>* result);
369 
370  /**
371  * 从 key 的有序集中获得指定位置区间的成员名及分值列表,成员按分值递减方式排序
372  * @param key {const char*} 有序集键值
373  * @param start {int} 起始下标位置
374  * @param stop {int} 结束下标位置(结果集同时含该位置)
375  * @param out 存储 "成员名-分值对"结果集,内部先调用 out.clear()
376  * 注:对于下标位置,0 表示第一个成员,1 表示第二个成员;-1 表示最后一个成员,
377  * -2 表示倒数第二个成员,以此类推
378  * @return {int} 结果集数量,-1 表示出错
379  */
380  int zrevrange_with_scores(const char* key, int start, int stop,
381  std::vector<std::pair<string, double> >& out);
382 
383  /**
384  * 返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )
385  * 的成员。有序集成员按 score 值递8减(从小到大)次序排列
386  * @param key {const char*} 有序集键值
387  * @param min {const char*} 以字符串表示最小分值
388  * @param max {const char*} 以字符串表示最大分值
389  * @param out {std::vector<string>*} 非空时存储“成员名”结果集
390  * @param offset {const int*} 非空时表示结果集的起始下标
391  * @param count {const int*} 非空时表示截取的结果集中成员个数
392  * @return {int} 结果集中成员的数量
393  * 0: 表示结果集为空或 key 不存在
394  * -1: 表示出错或 key 对象非有序集对象
395  * >0: 结果集的数量
396  * 注:
397  * 1)offset 和 count 必须同时为非空指针时才有效
398  * 2)min 和 max 可以是 -inf 和 +inf 来表示无限区间
399  * 3)默认情况下,区间的取值使用闭区间 (小于等于或大于等于),也可以通过给参数前
400  * 增加 ( 符号来使用可选的开区间 (小于或大于),如:
401  * 3.1)"ZRANGEBYSCORE zset (1 5" 返回所有符合条件 1 < score <= 5 的成员
402  * 3.2)"ZRANGEBYSCORE zset (5 (10" 返回所有符合条件 5 < score < 10 的成员
403  */
404  //int zrevrangebyscore(const char* key, const char* min, const char* max,
405  // std::vector<string>* out, const int* offset = NULL,
406  // const int* count = NULL);
407 
408  /**
409  * 返回有序集 key 中,所有 score 值介于 min 和 max 之间(包括等于 min 或 max )
410  * 的成员及分值。有序集成员按 score 值递减(从小到大)次序排列;分值(min/max)使用
411  * 浮点数表示
412  * @param out 存储“分值-成员名”对的结果集,内部先调用 out.clear()
413  * @param count {const int*} 非空时表示截取的结果集中成员个数
414  */
415  int zrevrangebyscore_with_scores(const char* key, double min,
416  double max, std::vector<std::pair<string, double> >& out,
417  const int* offset = NULL, const int* count = NULL);
418  int zrevrangebyscore_with_scores(const char* key, const char* min,
419  const char* max, std::vector<std::pair<string, double> >& out,
420  const int* offset = NULL, const int* count = NULL);
421 
422  /**
423  * 返回有序集 key 中成员 member 的排名(下标从 0 开始);其中有序集成员按 score
424  * 值递减(从大到小)排序
425  * @param key {const char*} 有序集键值
426  * @param member {const char*} 成员名
427  * @param len {size_t} member 的长度
428  * @return {int} 下标位置值,-1 -- 出错,或 key 非有序集对象,或成员名不存在
429  */
430  int zrevrank(const char* key, const char* member, size_t len);
431  int zrevrank(const char* key, const char* member);
432 
433  /**
434  * 获得有序集 key 中,成员 member 的 score 值
435  * @param key {const char*} 有序集键值
436  * @param member {const char*} 成员名
437  * @param len {size_t} member 的长度
438  * @param result {double&} 存储分值结果
439  * @return {bool} 当不存在或出错时返回 false,否则返回 true
440  */
441  bool zscore(const char* key, const char* member, size_t len,
442  double& result);
443  bool zscore(const char* key, const char* member, double& result);
444 
445  /**
446  * 计算给定的一个或多个有序集的并集,其中给定 key 的数量必须以 numkeys 参数指定,
447  * 并将该并集(结果集)储存到目标有序集; 默认情况下,结果集中某个成员的 score
448  * 值是所有给定集下该成员 score 值之和
449  * @param dst {const char*} 目标有序集键值
450  * @param keys 源有序集键值-权重集合;使用权重选项,可以为 每个 给定有序集 分别
451  * 指定一个乘法因子(multiplication factor),每个给定有序集的所有成员的 score
452  * 值在传递给聚合函数(aggregation function)之前都要先乘以该有序集的因子;
453  * 如果没有指定 WEIGHTS 选项,乘法因子默认设置为 1
454  * @param aggregate {const char*} 聚合方式,默认是 SUM 聚合方式,聚合方式如下:
455  * SUM: 将所有集合中某个成员的 score 值之 和 作为结果集中该成员的 score 值
456  * MIN: 将所有集合中某个成员的 最小 score 值作为结果集中该成员的 score 值
457  * MAX: 将所有集合中某个成员的 最大 score 值作为结果集中该成员的 score 值
458  * @return {int} 新保存到目标有序集的结果集中的元素(成员)数量,如果源有序集
459  * 集合中存在相同的成员,则只新增一个成员;返回 -1 表示出错
460  */
461  int zunionstore(const char* dst, const std::map<string, double>& keys,
462  const char* aggregate = "SUM");
463 
464  int zunionstore(const char* dst, const std::vector<string>& keys,
465  const std::vector<double>* weights = NULL,
466  const char* aggregate = "SUM");
467 
468  /**
469  * 计算给定的一个或多个有序集的交集,其中给定 key 的数量必须以 numkeys 参数指定,
470  * 并将该并集(结果集)储存到目标有序集; 默认情况下,结果集中某个成员的 score
471  * 值是所有给定集下该成员 score 值之和
472  * @return {int} 新保存到目标有序集的结果集中的元素(成员)数量
473  */
474  int zinterstore(const char* dst, const std::map<string, double>& keys,
475  const char* aggregate = "SUM");
476 
477  int zinterstore(const char* dst, const std::vector<string>& keys,
478  const std::vector<double>* weights = NULL,
479  const char* aggregate = "SUM");
480 
481  /**
482  * 命令用于迭代有序集合中的元素(包括元素成员和元素分值)
483  * @param cursor {int} 游标值,开始遍历时该值写 0
484  * @param out 存储结果集,内部以追加方式将本次遍历结果集合添加进该数组中,
485  * 为防止因总结果集过大导致该数组溢出,用户可在调用本函数前后清理该数组对象
486  * @param pattern {const char*} 匹配模式,glob 风格,非空时有效
487  * @param count {const size_t*} 限定的结果集数量,非空指针时有效
488  * @return {int} 下一个游标位置,含义如下:
489  * 0:遍历结束
490  * -1: 出错
491  * >0: 游标的下一个位置,即使这样,具体有多少结果还需要检查 out,因为有可能为空
492  */
493  int zscan(const char* key, int cursor,
494  std::vector<std::pair<string, double> >& out,
495  const char* pattern = NULL, const size_t* count = NULL);
496 
497  /**
498  * 当有序集合的所有成员都具有相同的分值时, 有序集合的元素会根据成员的字典序
499  * (lexicographical ordering)来进行排序, 而这个命令则可以返回给定的
500  * 有序集合键 key 中, 值介于 min 和 max 之间的成员
501  * @param min {const char*} 区间最小值
502  * @param max {const char*} 区间最大值
503  * @param out {std::vector<string>*} 非空时存储结果集
504  * @param offset {const int*} 非空时有效,从结果集中选取的下标起始值
505  * @param count {const int*} 非空时有效,从结果集中的指定下标位置起选取的数量
506  * @return {int} 结果集中成员的数量
507  * 0: 表示结果集为空或 key 不存在
508  * -1: 表示出错或 key 对象非有序集对象
509  * >0: 结果集的数量
510  * 注:关于区间的选择规则如下:
511  * 1)合法的 min 和 max 参数必须包含 ( 或者 [ , 其中 ( 表示开区间(指定的值
512  * 不会被包含在范围之内), 而 [ 则表示闭区间(指定的值会被包含在范围之内)
513  * 2)特殊值 + 和 - 在 min 参数以及 max 参数中具有特殊的意义, 其中 + 表示
514  * 正无限, 而 - 表示负无限。因此,向一个所有成员的分值都相同的有序集合发送命令
515  * ZRANGEBYLEX <zset> - + , 命令将返回有序集合中的所有元素
516  */
517  int zrangebylex(const char* key, const char* min, const char* max,
518  std::vector<string>* out, const int* offset = NULL,
519  const int* count = NULL);
520 
521  /**
522  * 于一个所有成员的分值都相同的有序集合键 key 来说, 这个命令会返回该集合中,
523  * 成员介于 min 和 max 范围内的元素数量
524  * @return {int} 符合条件的元素数量
525  */
526  int zlexcount(const char* key, const char* min, const char* max);
527 
528  /**
529  * 对于一个所有成员的分值都相同的有序集合键 key 来说, 这个命令会移除该集合中,
530  * 成员介于 min 和 max 范围内的所有元素
531  * @return {int} 被移除的元素数量
532  */
533  int zremrangebylex(const char* key, const char* min, const char* max);
534 
535  int zpopmin(const char* key,
536  std::vector<std::pair<string, double> >& out, size_t count = 1);
537  int zpopmax(const char* key,
538  std::vector<std::pair<string, double> >& out, size_t count = 1);
539  int bzpopmin(const char* key, size_t timeout, string& member,
540  double* score = NULL);
541  int bzpopmax(const char* key, size_t timeout, string& member,
542  double* score = NULL);
543  int bzpopmin(const std::vector<string>& keys, size_t timeout,
544  string& member, double* score = NULL);
545  int bzpopmax(const std::vector<string>& keys, size_t timeout,
546  string& member, double* score = NULL);
547 
548 private:
549  int zrange_get(const char* cmd, const char* key, int start,
550  int stop, std::vector<string>* result);
551  int zrange_get_with_scores(const char* cmd, const char* key, int start,
552  int stop, std::vector<std::pair<string, double> >& out);
553  int zrangebyscore_get(const char* cmd, const char* key,
554  const char* min, const char* max, std::vector<string>* out,
555  const int* offset = NULL, const int* count = NULL);
556  int zrangebyscore_get_with_scores(const char* cmd,
557  const char* key, const char* min, const char* max,
558  std::vector<std::pair<string, double> >& out,
559  const int* offset = NULL, const int* count = NULL);
560  int zstore(const char* cmd, const char* dst,
561  const std::map<string, double>& keys, const char* aggregate);
562  int zstore(const char* cmd, const char* dst, const std::vector<string>& keys,
563  const std::vector<double>* weights, const char* aggregate);
564  int zpop(const char* cmd, const char* key,
565  std::vector<std::pair<string, double> >& out, size_t count);
566  int get_with_scores(std::vector<std::pair<string, double> >& out);
567  int bzpop(const char* cmd, const char* key, size_t timeout,
568  string& member, double* score);
569  int bzpop(const char* cmd, const std::vector<string>& keys,
570  size_t timeout, string& member, double* score);
571  int bzpop_result(string& member, double* score);
572 };
573 
574 } // namespace acl
575 
576 #endif // !defined(ACL_CLIENT_ONLY) && !defined(ACL_REDIS_DISABLE)
#define ACL_CPP_DEPRECATED
Definition: atomic.hpp:86
#define ACL_CPP_API