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

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

安装hiredis

编译安装:

$ git clone git@github.com: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

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

  1. Java语言访问Redis数据库之Set篇

    如果想通过Java语言对Redis数据库进行访问. 首先,需要安装Redis数据库,可以是Windows系统,或者Linux系统.(本文以Windows系统的本地Redis数据库为例,代码说明如何操作 ...

  2. python访问redis

    python访问redis 1 Linux上安装redis a) 下载 $ wget http://download.redis.io/releases/redis-3.0.5.tar.gz b) 编 ...

  3. windows下vs2013使用C++访问redis

    刚开始在windows下使用c++访问reids各种报错,经过网上到处搜方案,终于可以在windows下访问redis了,特将注意事项记录下来: 1.获取redis Window下的开发库源码,从gi ...

  4. Rust语言Actix-web框架连接Redis数据库

    Rust语言Actix-web框架连接Redis数据库 actix-web2.0终于发布了,不再是测试版本,基于actor系统再加上异步支持,使得actix-web成为了目前响应速度最快的服务器框架, ...

  5. 使用Rest访问Redis中的数据

    原创文章转载请注明出处:@协思, http://zeeman.cnblogs.com   大家在用Redis保存数据的时候,有不同的序列化方式.用得最多应该还是JSON,有一些场景我们需要以Http请 ...

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

    Go语言通过ODBC 访问SQL server,这里需要用到go-odbc库,开源地址::https://github.com/weigj/go-odbc 一.驱动安装 在cmd中打开GOPATH: ...

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

    转自:http://blog.csdn.net/kkdelta/article/details/7217761 本文记录了安装Redis和从JAVA端访问Redis的步骤 从http://downlo ...

  8. 使用RedisTemplate的操作类访问Redis(转)

    深入理解Spring Redis的使用 (三).使用RedisTemplate的操作类访问Redis 事务需要开启enableTransactionSupport,然后使用@transactional ...

  9. jedis访问redis学习笔记

    最近在学习redis,在网上查了些文章,利用他人已有的知识,总结写下了这篇文章,大部分内容还是引用别人的文章内容.经过测试发现spring-data-redis现在有的版本只能支持reids 2.6和 ...

随机推荐

  1. doc.getElementById(id); null

    Open Declaration Element org.w3c.dom.Document.getElementById(String elementId) Returns the Element t ...

  2. 2.2.10数据类型String的常量池特性

    在JVM中具有String常量池缓存的功能 package com.cky.test; /** * Created by edison on 2017/12/8. */ public class Te ...

  3. set_time_limit

    语法 : void set_time_limit (int seconds)说明 : 设定一个程式所允许执行的秒数,如果到达限制的时间,程式将会传回错误.它预设的限制时间是30秒,max_execut ...

  4. user_agent

    public function getipinfo($ip) { $res = '其他'; $url = "http://int.dpool.sina.com.cn/iplookup/ipl ...

  5. 编写Shell脚本

    1.脚本的编写 Shell脚本本身是一个文本文件,这里编写一个简单的程序,在屏幕上显示一行helloworld! 脚本内容如下: #!/bin/bash #显示“Hello world!" ...

  6. js五道经典练习题--第一道

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...

  7. 微信内置浏览器私有接口WeixinJSBridge介绍

    原文地址:http://www.3lian.com/edu/2015/05-25/216227.html 这篇文章主要介绍了微信内置浏览器私有接口WeixinJSBridge介绍,本文讲解了发送给好友 ...

  8. 分形之二叉树(Binary Tree)

    上一篇文章讲的是分形之树(Tree),这一篇中将其简化一下,来展示二叉分形树的生长过程. 核心代码: static void FractalBinaryTree(const Vector3& ...

  9. 最全面的Git 使用规范装逼指南[转载]

    <!DOCTYPE html> <script type="text/javascript"> window.logs = { pagetime: {} } ...

  10. EntityFramework Core 学习扫盲

    0. 写在前面 1. 建立运行环境 2. 添加实体和映射数据库 1. 准备工作 2. Data Annotations 3. Fluent Api 3. 包含和排除实体类型 1. Data Annot ...