hiredis

// 执行redis命令
void *redisCommand(redisContext *c, const char *format, ...);
// redisCommand 函数实际的返回值类型
 
typedef struct redisReply {
/* 命令执行结果的返回类型 */
int type;
/* 存储执行结果返回为整数 */
long long integer;
/* str变量的字符串值长度 */
size_t len;
/* 存储命令执行结果返回是字符串, 或者错误信息 */
char *str;
/* 返回结果是数组, 代表数据的大小 */
size_t elements;
/* 存储执行结果返回是数组*/
struct redisReply **element;
} redisReply;
redisReply a[100];
 
REDIS_REPLY_STRING==1 返回值是字符串,字符串储存在redis->str当中,字符串长度为redi
REDIS_REPLY_ARRAY== 2
返回值是数组,数组大小存在redis->elements里面,数组值存储在
redis->element[i]里面。数组里面存储的是指向redisReply的指针,数
组里面的返回值可以通过redis->element[i]->str来访问,数组的结果
里全是type==REDIS_REPLY_STRING的redisReply对象指针。
REDIS_REPLY_INTEGER
== 3 返回整数long long,从integer字段获取值
REDIS_REPLY_NIL==4 返回值为空表示执行结果为空
REDIS_REPLY_STATUS
==5
返回命令执行的状态,比如set foo bar 返回的状态为OK,存储在str
当中 reply->str == "OK" 。
REDIS_REPLY_ERROR ==6 命令执行错误,错误信息存放在 reply->str当中。

 

// 释放资源
void freeReplyObject(void *reply);
void redisFree(redisContext *c);

 

 

#include <stdio.h>
#include <hiredis.h>

int main()
{
// 1. 连接redis服务器
redisContext* c = redisConnect("127.0.0.1", 6379);
if (c->err != 0)
{
return -1;
}
// 2. 执行redis命令
void *prt = redisCommand(c, "hmset user userName zhang3 passwd 123456 age 23 sex man");
redisReply* ply = (redisReply*)prt;
if(ply->type == 5)
{
// 状态输出
printf("状态: %s\n", ply->str);
}
freeReplyObject(ply);

// 3. 从数据库中读数据
prt = redisCommand(c, "hgetall user");
ply = (redisReply*)prt;
if(ply->type == 2)
{
// 遍历
for(int i=0; i<ply->elements; i+=2)
{
printf("key: %s, value: %s\n", ply->element[i]->str, ply->element[i+1]->str);
}
}
freeReplyObject(ply);

redisFree(c);
return 0;
}

 

posted @   咖喱给给啊  阅读(221)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示