REDIS 客户端, LIB-ZC

LIB-ZC 封装 redis 客户端, 支持单点(standalone)和集群(cluster)

顺利使用本客户端, 请参阅 http://doc.redisfans.com/

函数: 基本操作

zredis_client_t *zredis_client_connect(const char *destination, const char *password, int connect_timeout);

创建连接器; destination: 目的地址, password: 密码, 空(没有密码), connect_timeout: 连接超时

zredis_client_t *zredis_client_connect_cluster(const char *destination, const char *password, int cmd_timeout);

创建连接, 连接集群器; 参数同上

void zredis_client_disconnect(zredis_client_t *rc);

关闭连接, 并释放

void zredis_client_set_read_wait_timeout(zredis_client_t *rc, int read_wait_timeout);

设置可读超时

void zredis_client_set_write_wait_timeout(zredis_client_t *rc, int write_wait_timeout);

设置可写超时

void zredis_client_set_auto_reconnect(zredis_client_t *rc, zbool_t auto_reconnect);

设置是否自动重连

const char *zredis_client_get_error_msg(zredis_client_t *rc);

获取错误信息

函数: 通用redis命令

redis 命令返回结果可以抽象为json, 绝大部分情况可以简化为 4 类: 成功/失败, 整数, 字符串, 字符串向量

下面的函数统一说明:

int zredis_client_get_json(zredis_client_t *rc, zjson_t *json_ret, const char *redis_fmt, ...);

通用; 得到的结果存储到 json_ret

int zredis_client_get_success(zredis_client_t *rc, const char *redis_fmt, ...);

结果体现在返回值上; 适合 EXISTS, DEL, HEXISTS, SISMEMBER, 等

int zredis_client_get_long(zredis_client_t *rc, long *number_ret, const char *redis_fmt, ...);

得到一个整数结果, 并赋值给 *number_ret; 适合 INCR, DBSIZE, HLEN, 等

int zredis_client_get_string(zredis_client_t *rc, zbuf_t *string_ret, const char *redis_fmt, ...);

得到一个字符串结果, 并赋值(覆盖)给 string_ret; 适合 GET, LPOP, 等

int zredis_client_get_vector(zredis_client_t *rc, zvector_t *vector_ret, const char *redis_fmt, ...);

得到一字符串向量结果, 并赋值(追加)给 vector_ret; 适合 HGETALL, MGET, HMGET, 等

int zredis_client_vget(zredis_client_t *rc, long *number_ret, zbuf_t *string_ret
  , zvector_t *vector_ret, zjson_t *json_ret, const char *redis_fmt, va_list ap);

得到结果, 尽量写入 *number_ret, string_ret, vector_ret, json_ret

redis_fmt

介绍所谓 "redis 命令", 所有的 redis 命令都是通过上面的(redis_fmt, ...)拼接得到的

redis_fmt 和 (redis_fmt, ...)

类型解释
schar *
Szbuf_t *
dint
llong
fdoubel
Lzlist_t *; <zbuf_t *>
Vzvector_t *; <zbuf_t *>
Azargv_t *
Pchar **; NULL结尾

命令例子

函数: SCAN相关

SCAN/HSCAN/SSCAN/ZSCAN 这些 redis 命令当然也可以通过上节所提函数使用
但不自然, 所以单独封一个函数使用

int zredis_client_scan(zredis_client_t *rc, zvector_t *vector_ret, long *cursor_ret, const char *redis_fmt, ...);

vector_ret: 保存当前结果; *cursor_ret: 保存 cursor; 使用的时候 *cursor_ret 设置为初始值(如 0)

函数: 命令info

redis 命令 info 返回的是一堆字符串; 下面提供函数, 同时解析 info 的返回为一个词典

int zredis_client_get_info_dict(zredis_client_t *rc, zdict_t *info);

redis 命令 info, 对返回的字符换结果分析成词典, 保存在info

函数: 订阅

int zredis_client_subscribe(zredis_client_t *rc, const char *redis_fmt, ...);

订阅频道; 不能输入命令字段 "SUBSCRIBE"

int zredis_client_psubscribe(zredis_client_t *rc, const char *redis_fmt, ...);

模式订阅频道; 不能输入命令字段 "PSUBSCRIBE"

int zredis_client_fetch_channel_message(zredis_client_t *rc, zvector_t *vector_ret);

获取消息, 结果保存在 vector_ret; 有消息返回, 没有消息阻塞

简单用法

例子

https://gitee.com/linuxmail/lib-zc/blob/master/sample/redis/client.c

https://gitee.com/linuxmail/lib-zc/blob/master/sample/redis/subscribe.c

京ICP备18054515号-2 eli960@qq.com qq: 1537212398