Linux version 4.4.0-22-generic (buildd@lgw01-41) (gcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2) ) #40-Ubuntu SMP Thu May 12 22:03:46 UTC 2016
wget http://download.redis.io/releases/redis-3.0.6.tar.gz tar xzf redis-3.0.6.tar.gz cd redis-3.0.6 make
wget https://github.com/redis/hiredis/archive/master.zipunzip master.zip
makesudo make install
mkdir -p /usr/local/include/hiredis /usr/local/lib cp -a hiredis.h async.h read.h sds.h adapters /usr/local/include/hiredis cp -a libhiredis.so /usr/local/lib/libhiredis.so.0.13 cd /usr/local/lib && ln -sf libhiredis.so.0.13 libhiredis.so cp -a libhiredis.a /usr/local/lib mkdir -p /usr/local/lib/pkgconfig cp -a hiredis.pc /usr/local/lib/pkgconfig
/* * redis链接函数, 返回redis上下文. * ip : 链接地址的ip * port : 链接端口 * : 返回 redis上下文, NULL表示获取失败 */ redisContext *redisConnect(const char *ip, int port) /* * 执行redis操作命令, 返回得到的结果集 * context : redisConnect 返回的redis上下文对象 * format : 等同于 printf格式控制符 * ... : 后面可变参数, 需要和 format中格式符对应 * : 返回 得到的结果集 */ void *redisCommand(redisContext *context, const char *format, ...); /* * 释放redis命令操作返回过来的结果集 * reply : redisCommand返回的结果集 */ void freeReplyObject(void *reply); /* * 释放链接上下文 * context : redisConnect返回的链接上下文 */ void redisFree(redisContext *context);
第一个是 redisConnect 返回的 redisContext上下文结构
/* Context for a connection to Redis */
typedef struct redisContext {
int err; /* Error flags, 0 when there is no error */
char errstr[128]; /* String representation of error when applicable */
int fd;
int flags;
char *obuf; /* Write buffer */
redisReader *reader; /* Protocol reader */
enum redisConnectionType connection_type;
struct timeval *timeout;
struct {
char *host;
char *source_addr;
int port;
} tcp;
struct {
char *path;
} unix_sock;
} redisContext;
还有一个是 redisCommand 返回的命令集
/* This is the reply object returned by redisCommand() */
typedef struct redisReply {
int type; /* REDIS_REPLY_* */
long long integer; /* The integer when type is REDIS_REPLY_INTEGER */
int len; /* Length of string */
char *str; /* Used for both REDIS_REPLY_ERROR and REDIS_REPLY_STRING */
size_t elements; /* number of elements, for REDIS_REPLY_ARRAY */
struct redisReply **element; /* elements vector for REDIS_REPLY_ARRAY */
} redisReply;
#include <stdio.h>
#include <stdlib.h>
#include <hiredis/hiredis.h>
/*
* 请求 redis网络缓存服务器内存.
*/
int main(int argc, char* argv[]) {
redisContext *conn = redisConnect("127.0.0.1", 6379);
if(NULL == conn) {
fprintf(stderr, "redisConnect 127.0.0.1:6379 error!\n");
exit(EXIT_FAILURE);
}
if(conn->err) {
fprintf(stderr, "redisConect error:%d\n", conn->err);
redisFree(conn);
exit(EXIT_FAILURE);
}
// 这里redisConnect 链接对象创建完毕了
redisReply *reply = redisCommand(conn, "get foo");
if(reply && reply->type == REDIS_REPLY_STRING) {
printf("get foo => %s\n", reply->str);
}
printf("reply->type = %d\n", reply->type);
// 释放这个对象
freeReplyObject(reply);
// 释放hiredis 上下文对象
redisFree(conn);
return 0;
}
find . -name *.h | xargs grep 'REDIS_REPLY_STRING'
#define REDIS_REPLY_STRING 1 #define REDIS_REPLY_ARRAY 2 #define REDIS_REPLY_INTEGER 3 #define REDIS_REPLY_NIL 4 #define REDIS_REPLY_STATUS 5 #define REDIS_REPLY_ERROR 6
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <hiredis/hiredis.h>
/*
* 请求 redis网络缓存服务器内存.
*/
int main(int argc, char* argv[]) {
// 忽略服务器退出,导致当前进程退出
signal(SIGPIPE, SIG_IGN);
redisContext *conn = redisConnect("127.0.0.1", 6379);
if(NULL == conn) {
fprintf(stderr, "redisConnect 127.0.0.1:6379 error!\n");
exit(EXIT_FAILURE);
}
if(conn->err) {
fprintf(stderr, "redisConect error:%d\n", conn->err);
redisFree(conn);
exit(EXIT_FAILURE);
}
// 这里redisConnect 链接对象创建完毕了
freeReplyObject(redisCommand(conn, "lpush mylist foo"));
freeReplyObject(redisCommand(conn, "lpush mylist bar"));
redisReply *reply = redisCommand(conn, "lrange mylist 0 -1");
if(reply && reply->type == REDIS_REPLY_ARRAY && reply->elements == 2) {
printf("%s %s\n", reply->element[0]->str, reply->element[1]->str);
}
else {
printf("redisCommand [lrange mylist 0 -1] error:%d. %s\n", reply->type, reply->str);
}
// 释放这个对象
freeReplyObject(reply);
// 释放hiredis 上下文对象
redisFree(conn);
return 0;
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有