当前位置: 首页 > news >正文

linux下hiredis安装、C接口编程

前言

安装redis之后,一般要结合编程语言实现对redis的数据操作。hiredis是redis提供的c语言API包。本篇就介绍一下linux下hiredis的安装和C接口编程,包括编译运行过程中要注意的点和遇到的问题也一一列出。

再按照以下步骤操作之前,默认机器上已经安装并启动了redis。测试是否启动了redis服务,使用以下命令:

redis-cli
或
ps -ef|grep redis

若出现图中所示画面,说明redis-server已经启动。 

1.hiredis的安装

 (1)hiredis源码获取

github:https://github.com/redis/hiredis,使用命令获取hiredis源码

git clone https://github.com/redis/hiredis.git

(2)编译安装 

make
make install

2. hiredis C接口编程

主要接口

主要有4个接口,
1)redisContext* redisConnect(const char *ip, int port)
   //连接redis。
2)void *redisCommand(redisContext *c, const char *format, ...);
   //执行redis操作命令,支持可变参数
3)void freeReplyObject(void *reply);
   //释放执行redis操作命令回复的内存
4)void redisFree(redisContext *c);

   //释放连接上下文。

异常处理:
主要4种异常情况会出现,
1)获得的redisContext指针为null
   异常处理办法:再次尝试与redis建立新的连接上下文。
2)获得的redisContext指针err不为0
   异常处理办法:再次尝试与redis建立新的连接上下文。
3)获得的redisReply指针为null
   异常处理办法:断开redis连接再次与redis建立连接并尝试执行命令。
4)获得的reply指针的type不是期望的类型,
   异常处理办法:断开redis连接再次与redis建立连接并尝试执行命令。

demo:

#include <iostream>
#include "hiredis/hiredis.h"

using namespace std;

int main()
{
    redisContext *pContext = redisConnect("127.0.0.1",6379); //建立连接
    if(pContext->err)
    {
        redisFree(pContext);
        cout << "connect to redisServer fail" << endl;
        return -1;
    }
    cout << "connect to redisServer success" << endl;
    //执行命令
    redisReply *pReply = (redisReply*)redisCommand(pContext,"set main helloWorld");
    string name = "name";
    pReply = (redisReply*)redisCommand(pContext,"set %s xiaoluo",name.c_str());
    cout << pReply->str << endl;

    pReply = (redisReply*)redisCommand(pContext,"get %s",name.c_str());
    cout << pReply->str << endl;
    //释放连接
    freeReplyObject(pReply);
    redisFree(pContext);
    return 0;
}

 编译:g++ -o main main.cpp -lhiredis,注意,这里的编译需要链接hireds动态库。

运行,之后使用redis-cli打开redis客户端查看数据库中的数据:

3.遇到的错误:

编译时报错:error while loading shared libraries: libhiredis.so.1.0.1-dev: cannot open shared object file: No such file or directory

问题原因

hiredis动态库libhiredis.so.1.0.1-dev 的默认安装路径在/usr/local/lib目录,系统找不到这个动态库。

解决方法

1、检查一下/etc/ld.so.conf文件中是否包含需要的动态库的目录(如/usr/local/lib),如果没有的话就添加进出 

2、执行sudo /sbin/ldconfig,更新一下系统动态库配置

相关文章:

  • redis源码学习之数据结构---双向链表
  • redis源码分析--事件驱动模型
  • ubuntu下zmq编译安装及请求-应答模式测试
  • c++输出:怎么解决数字过大时默认使用科学计数法输出的问题?
  • c++11实现一个自动注册的工厂模式
  • zmq发布-订阅模式c++实现
  • linux报错:bash: syntax error near unexpected token `(‘ --路径中有括号怎么处理?
  • golang学习总结--函数
  • golang学习总结--结构体、接口
  • 解决运行时报错:error while loading shared libraries xxx.so,cannot open shared object file
  • 超实用:linux shell光标移动常用快捷键
  • git commit之后如何撤销
  • golang学习总结--协程、channel
  • 跟我一起写dockerfile
  • dockerfile中多个FROM指令的意义(multistage)
  • 时间复杂度分析经典问题——最大子序列和
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • 4. 路由到控制器 - Laravel从零开始教程
  • Android优雅地处理按钮重复点击
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • Consul Config 使用Git做版本控制的实现
  • egg(89)--egg之redis的发布和订阅
  • github从入门到放弃(1)
  • HTTP那些事
  • Java基本数据类型之Number
  • nodejs实现webservice问题总结
  • Transformer-XL: Unleashing the Potential of Attention Models
  • vue 个人积累(使用工具,组件)
  • Web设计流程优化:网页效果图设计新思路
  • 聊聊redis的数据结构的应用
  • 如何利用MongoDB打造TOP榜小程序
  • 一天一个设计模式之JS实现——适配器模式
  • - 转 Ext2.0 form使用实例
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • #预处理和函数的对比以及条件编译
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (03)光刻——半导体电路的绘制
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (2020)Java后端开发----(面试题和笔试题)
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (Python第六天)文件处理
  • (第27天)Oracle 数据泵转换分区表
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (三)Honghu Cloud云架构一定时调度平台
  • (十六)串口UART
  • (转)setTimeout 和 setInterval 的区别
  • (转)母版页和相对路径
  • .cn根服务器被攻击之后
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .NET 设计模式初探
  • .net 怎么循环得到数组里的值_关于js数组
  • .NET处理HTTP请求
  • .NET关于 跳过SSL中遇到的问题
  • .NET开源快速、强大、免费的电子表格组件