C语言使用hiredis访问redis

Hiredis 是Redis数据库的简约C客户端库。它是简约的,因为它只是增加了对协议的最小支持,但是同时它使用了一个高级别的 printf-like API,所以对于习惯了 printf 风格的C编程用户来说,其非常容易使用,而且API中没有明确的绑定每个 Redis 命令。

Github: https://github.com/redis/hiredis

安装hiredis

编译安装:

$ git clone [email protected]:redis/hiredis.git
$ cd hiredis
$ make
$ make install

下面是make install的输出:

mkdir -p /usr/local/include/hiredis /usr/local/include/hiredis/adapters /usr/local/lib
cp -pPR hiredis.h async.h read.h sds.h /usr/local/include/hiredis
cp -pPR adapters/*.h /usr/local/include/hiredis/adapters
cp -pPR libhiredis.so /usr/local/lib/libhiredis.so.0.13
cd /usr/local/lib && ln -sf libhiredis.so.0.13 libhiredis.so
cp -pPR libhiredis.a /usr/local/lib
mkdir -p /usr/local/lib/pkgconfig
cp -pPR hiredis.pc /usr/local/lib/pkgconfig

复制动态链接库到lib:

cp libhiredis.so /usr/lib64 /usr/lib 

若是32系统只需要运行:

cp libhiredis.so /usr/lib

还需要更新下动态链接库缓存:

/sbin/ldconfig

ldconfig 命令的用途主要是在默认搜寻目录 /lib/usr/lib 以及动态库配置文件 /etc/ld.so.conf 内所列的目录下,搜索出可共享的动态链接库(格式如lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件。缓存文件默认为 /etc/ld.so.cache ,此文件保存已排好序的动态链接库名字列表,为了让动态链接库为系统所共享,需运行动态链接库的管理命令 ldconfig ,此执行程序存放在/sbin目录下。

ldconfig通常在系统启动时运行,而当用户安装了一个新的动态链接库时,就需要手工运行这个命令。

客户端代码

test.c

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

int main()
{
    redisContext* conn = redisConnect("127.0.0.1", 6379);
    if(conn->err)   printf("connection error:%s\n", conn->errstr);  

    redisReply* reply = redisCommand(conn, "set foo 1234");
    freeReplyObject(reply);  

    reply = redisCommand(conn, "get foo");  

    printf("%s\n", reply->str);
    freeReplyObject(reply);  

    redisFree(conn);  

    return 0;
}

然后:

$ gcc test.c -o test -lhiredis

编译是一定要使用-l连接动态库。

-lstack 告诉编译器要链接 lhiredis 库。

运行:

$ ./test
1234

函数原型

redisConnect

redisContext *redisConnect(const char *ip, int port)

说明:该函数用来连接redis数据库,参数为数据库的ip地址和端口,一般redis数据库的端口为6379。

该函数返回一个结构体redisContext

redisCommand

void *redisCommand(redisContext *c, const char *format, ...);

说明:该函数执行命令,就如sql数据库中的SQL语句一样,只是执行的是redis数据库中的操作命令,第一个参数为连接数据库时返回的redisContext,剩下的参数为变参,就如C标准函数printf函数一样的变参。

返回值为void*,一般强制转换成为redisReply类型的进行进一步的处理。

freeReplyObject

void freeReplyObject(void *reply);

说明:释放 redisCommand 执行后返回的 redisReply 所占用的内存。

redisFree

void redisFree(redisContext *c);

说明:释放 redisConnect() 所产生的连接。

参考

1、Redis:安装、配置、操作和简单代码实例(C语言Client端) - CSDN博客
https://blog.csdn.net/hj19870806/article/details/8724907
2、C语言访问redis(hiredis) - CSDN博客
https://blog.csdn.net/sole_cc/article/details/38015765
3、error while loading shared libraries问题解决 - CSDN博客
https://blog.csdn.net/qgd19931120/article/details/50971142
4、ldconfig命令_Linux ldconfig 命令用法详解:动态链接库管理命令
http://man.linuxde.net/ldconfig?mstqrk=qdwrv1

原文地址:https://www.cnblogs.com/52fhy/p/9196527.html

时间: 2024-08-30 09:09:52

C语言使用hiredis访问redis的相关文章

Serverless 解惑——函数计算如何访问 Redis 数据库

函数计算(Function Compute):函数计算 是事件驱动的全托管计算服务.使用函数计算,您无需采购与管理服务器等基础设施,只需编写并上传代码.函数计算为您准备好计算资源,弹性地可靠地运行任务,并提供日志查询.性能监控和报警等功能.借助函数计算,您可以快速构建任何类型的应用和服务,并且只需为任务实际消耗的资源付费. 访问 Redis 数据库是指在函数计算中通过编写代码调用数据库驱动库通过 TCP 协议实现对数据库进行的插入.查询等操作.通常函数计算中运行的不同函数实例之间是不共享状态的,

使用Rest访问Redis中的数据

原创文章转载请注明出处:@协思, http://zeeman.cnblogs.com 大家在用Redis保存数据的时候,有不同的序列化方式.用得最多应该还是JSON,有一些场景我们需要以Http请求的方式访问Redis数据.它有几方面的作用: 1. 用Redis自有的Cli命令式查看JSON数据很不方便,而以Http方式请求配合Chrome的JSON插件可以满足需求. 2. 接口是以Rest的方式定义,可以用Rest的客户端来访问对应的Redis实例数据. 代码是以Node.js和Coffee

CentOS+Apache+php无法访问redis的解决方法 Redis server went away

在CentOS下配置Apache+php+redis+phpredis环境.编辑访问redis缓存的php程序test.php,以应用程序方式在后台运行,可成功访问Redis,而在Apache下以网页形式访问时则出错,在访问Redis以及之后的代码均不再执行.查看Apache的日志:/var/log/httpd/error_log,发现代码运行时出现异常:PHP Fatal error: Uncaught exception 'RedisException' with message 'Redi

CentOS+Apache+php无法访问redis的解决方法

PHP 使用 Redis 安装 开始在 PHP 中使用 Redis 前, 我们需要确保已经安装了 redis 服务及 PHP redis 驱动,且你的机器上能正常使用 PHP. 接下来让我们安装 PHP redis 驱动:下载地址为:https://github.com/phpredis/phpredis/releases. PHP安装redis扩展 以下操作需要在下载的 phpredis 目录中完成: $ wget https://github.com/phpredis/phpredis/ar

从JAVA客户端访问Redis示例(入门)

转自:http://blog.csdn.net/kkdelta/article/details/7217761 本文记录了安装Redis和从JAVA端访问Redis的步骤 从http://download.csdn.net/detail/kkdelta/4034137 下载本文所需文件. 1,在Linux上安装Redis服务. 下面的操作的base dir为 /root/4setup tar xzf redis-2.4.6.tar cd redis-2.4.6 make 安装完后启动 nohup

Unable to Connect: sPort: 0 C# ServiceStack.Redis 访问 redis

需求:  对数据库中的不断抓取的文章进行缓存,因此需要定时访问数据,写入缓存中 在捕获到的异常日志发现错误:Unable to Connect: sPort: 0 使用的访问方式是线程池的方式:PooledRedisClientManager 经过测试发现在并发访问redis服务的情况下出现该异常的概率比较高, 解决方法 第一点:要使用using(据说访问效率在高并发的时候会有影响,简单的测试过了确实是这样,不过现在的业务达不到高并发量,速度还是很快滴) using (IRedisClient

ODBC database driver for Go:Go语言通过ODBC 访问SQL server

Go语言通过ODBC 访问SQL server,这里需要用到go-odbc库,开源地址::https://github.com/weigj/go-odbc 一.驱动安装 在cmd中打开GOPATH: 转到src目录 在src目录通过git获取odbc驱动: git clone git://github.com/weigj/go-odbc.git odbc 转到odbc目录: 运行go install命令: 提示未安装 gcc 编译程序,到官方网站下载http://tdm-gcc.tdragon.

Java语言中的---访问说明符

day03  Java语言中的-----访问说明符 一.访问说明符的概述: 访问说明符其实就是设置一个访问权限,只有设置好这个访问权限以后才能更好的封装我们的一些变量或方法.所以学好这个说明符对我们后续学习Java的封装功能很有帮助. 二.访问说明符:  1.访问说明符有哪些? 在Java语言中,访问说明符就可以实现对类成员的一个封装,从而就按包含4种说明符,public.private.default.protected.下面就一一的介绍一下. 1.1.public :公开的.可以被任何类访问

Java语言中的-----访问修饰符

day04 Java语言中的----访问修饰符 一.访问修饰符概述: 访问修饰符就是对变量或者是方法或者是类的一个修饰,通过修饰以后实现一些必要的权限,主要是说明类成员如何被使用的作用. 二.访问修饰符 1.访问修饰符有哪些? 访问修饰符总共有8种,本文只先给大家说static和final两个修饰符 1.1.final.修饰常量的 1.2.static.修饰静态的 1.3.abstract. 1.4.native. 1.5.sysnchronized.修饰线程的 1.6.transient. 1