redis提供的API中,redisCommandArgv接口是二进制安全的,我们可以利用此接口实现对二进制的存取。下面是测试代码
#include <stdio.h>
#include <time.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <sstream>
#include "hiredis.h"
struct st
{
int a;
int b;
char c;
int d;
};
void set(void)
{
struct st t;
t.a = 1;
t.b = 2;
t.c = 'a';
t.d = 4;
redisContext *c = redisConnect("127.0.0.1", 6379);
if (!c) {
printf("connect to redis fail\n");
exit(1);
}
const char *v[3];
size_t vlen[3];
v[0] = "set";
vlen[0] = strlen("set");
v[1] = "c";
vlen[1] = strlen("c");
v[2] = (const char *)&t;
vlen[2] = sizeof(struct st);
redisReply *r = (redisReply *)redisCommandArgv(c, sizeof(v) / sizeof(v[0]), v, vlen);
if (!r) {
printf("empty reply\n");
exit(1);
}
printf("reply: