引言
先说redis安装, 这里采用的环境是.
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
对于 ubuntu 安装 redis是非常简单的. 这里采用源码安装. 安装代码如下
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
安装后我的环境是
那我们测试一下. 安装结果. 先启动 redis-server 服务器.
再启动 redis-cli 客户端
我们开始测试一下.
测试之后一切正常. redis linux上安装基本完毕了. 更加详细的参照
Redis 官网教程 很详细 http://www.redis.net.cn/tutorial/3501.html
前言
现在我们安装 redis c 访问的驱动. hiredis. 一开始都是下载安装. 我是直接从 hiredis git官网下载安装的.
hiredis 源码 https://github.com/redis/hiredis
wget https://github.com/redis/hiredis/archive/master.zipunzip master.zip
安装完毕会看见这样环境
执行安装命令
makesudo make install
本质对于 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
此刻基本上 hiredis 驱动已经安装完毕. 后面解释一下, 驱动提供的api.
常用的 api如下.
redisContext *redisConnect(const char *ip, int port) void *redisCommand(redisContext *context, const char *format, ...); void freeReplyObject(void *reply); void redisFree(redisContext *context);
更加详细的解释我们可以看 源码接口文件 hiredis/hiredis.h . 例如
第一个是 redisConnect 返回的 redisContext上下文结构
typedef struct redisContext {
int err;
char errstr[128];
int fd;
int flags;
char *obuf;
redisReader *reader;
enum redisConnectionType connection_type;
struct timeval *timeout;
struct {
char *host;
char *source_addr;
int port;
} tcp;
struct {
char *path;
} unix_sock;
} redisContext;
还有一个是 redisCommand 返回的命令集
typedef struct redisReply {
int type;
long long integer;
int len;
char *str;
size_t elements;
struct redisReply **element;
} redisReply;
关于 hiredis基本的C驱动接口,解释完毕. 后面开始写demo测试一番.最好的理解方式还是看官方源码和测试代码.
正文
首先来个简单的demo测试. simpleget.c
#include#include #include 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:%dn", conn->err); redisFree(conn); exit(EXIT_FAILURE); } // 这里redisConnect 链接对象创建完毕了 redisReply *reply = redisCommand(conn, "get foo"); if(reply && reply->type == REDIS_REPLY_STRING) { printf("get foo => %sn", reply->str); } printf("reply->type = %dn", reply->type); // 释放这个对象 freeReplyObject(reply); // 释放hiredis 上下文对象 redisFree(conn); return 0; }
编译命令是
gcc -Wall -ggdb -o simpleget.out simpleget.c -lhiredis
最终测试结果是
最终测试结果是
这里表明流程是跑通了. 这里扩展一下, 有时候在Linux上查找函数或宏定义声明好麻烦. 我用的方式是
find . -name *.h | xargs grep 'REDIS_REPLY_STRING'
笨方法也挺实用的. 查找的结果是 上面 REDIS_REPLY_STRING 定义在 hiredis/read.h 中 摘录部分如下
#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
通过这些宏枚举区分返回的值. 其实到这里基本上 关于 redis接口使用基本入门了. 后面再举一个 操作list的操作代码 setlist.c
#include#include #include #include 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:%dn", 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 %sn", reply->element[0]->str, reply->element[1]->str); } else { printf("redisCommand [lrange mylist 0 -1] error:%d. %sn", reply->type, reply->str); } // 释放这个对象 freeReplyObject(reply); // 释放hiredis 上下文对象 redisFree(conn); return 0; }
编译代码
gcc -Wall -ggdb -o setlist.out setlist.c -lhiredis
运行结果如下
更加详细介绍请参照 hiredis git上 源码.
后记
到这里关于C简单使用控制redis服务器, 基本讲完了. 错误是难免的. 欢迎指正.
以上这篇C基础 redis缓存访问详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持考高分网。



