redis(4)-hiredis-API函数的调用

news2024/11/25 14:50:14

1.下载安装编译
 

windowslinux
redis下载

redis-plus-plus-master.zip文件的下载

http://download.redis.io/releases/redis-7.2.0.tar.gz
tar -zxvf  redis-7.2.0.tar.gz 
//-z:gzip属性 ;-x:解压;-v:显示;-f:文件
make
make install  //make distclean
hiredis下载 hiredis-master.zip文件的下载
https://github.com/redis/hiredis.git
 
安装与编译


详见:redis(1)-hiredis-Windows下的编译-CSDN博客

1.hiredis cmake
2.redis-plus-plus cmake

 

编译后生成的文件





redis++.dll
redis++.lib
redis++_static.dll
redis++_static.lib

hiredisd.lib
hiredisd.dll


 

需要添加的头文件和源文件1.工程->属性->C++->附加包含目录:
原始下载的hiredis-master下的D:\IPS3000\tangfiles\linux\centos-src-9-74\hiredis\hiredis-master
2.工程->属性->链接器->输入
..\Debug\hiredisd.lib
3.
 
GitHub - redis/hiredis: Minimalistic C client for Redis >= 1.2
重要的函数重要的函数就3个:
redisContext *redisConnect(const char *ip, int port);
void *redisCommand(redisContext *c, const char *format, ...);
void freeReplyObject(void *reply);


 


    1.1 hiredis
    GitHub - sewenew/redis-plus-plus: Redis client written in C++icon-default.png?t=N7T8https://github.com/sewenew/redis-plus-plus
     1.2 redis官网下载+安装+编译
           如果下的是7的版本,不需要下hiredis.直接编译即可。
          

$ wget http://download.redis.io/releases/redis-7.2.0.tar.gz
$ tar -zxvf redis-7.2.0.tar.gz
# -z:gzip  x:解压  v:显示所有过程  f:文件
$ cd redis-7.2.0
$ make
$ make install
 
$ redis-server
$ redis-cli


默认的安装目录:/usr/local/redis
              /usr/

/usr/local/include   
/usr/local/lib  
/usr/local/lib/pkgconfig

  错误提示:
 1./bin/sh: 1: pkg-config: not found
   apt-get install pkg-config
    make distclean && make


srv/ftp/

#1.ubuntu 下安装tftp
   apt-get install vsftpd
   apt-get install ftp
    


#2.修改配置文件
   vim /etc/vsftpd.conf
     local_enables=YES
     write_enable=YES
     anonymous_enable=YES
     anon_mkdir_write_enable=YES   //允许匿名用户在FTP上创建目录
     anon_upload_enable=YES        //允许匿名用户在FTP服务器上上传文件
     anon_other_write_enable=YES   //开启匿名用户的其他写权限


#不要用root 或者 anonymous访问
    


 

1.1make 之前 

5.0.147.2.0
make
1.deps/jemalloc 多了lib文件夹
2.deps/lua/ 多了.o文件
3.src 下多了.o文件
 
make  test
两个版本的对比:1.deps/fpconv
2.deps/hdr_histogram
3.deps/hiredis :ssl
                sockcompat
4.src/commands
5.src/ 多了好多函数

 
make install 

之前bin,lib,inlcude3个文件夹下什么都没有。
安装后:
1.redis-5.2.0/src下有6个应用程序redis-server
2./usr/local/bin 下有6个应用程序redis-server
3./usr/local/include  无 
4. /usr/local/lib        无
/usr/local/lib/pkgconfig

1.redis-7.2.0/src下有6个应用程序redis-server 只保留一个版本。
2./usr/local/bin下有6个应用程序redis-server
3./usr/local/include  无 
4. /usr/local/lib       


/usr/local/lib/pkgconfig

所有文件在目录下:
/home/tang/redis-5.0.14
配置文件:/home/tang/redis-5.0.14/redis.conf
日志文件:/var/log/redis/redis-server.log

1.make 前后的对比

    

2.5版本和7版本的对比


 


 
     


2.启动服务器和客户端


    2.1 src下启动
    cd   redis7/src
           redis-server
           redis-cli
         

./src/redis-cli
​​​​​​​#带Host、Port、Auth连接: ./src/redis-cli -h 127.0.0.1 -p 6379 -a 123456


   2.2 修改环境变量
      /etc/profile



3.redis 自带的hiredis基本用法
 

https://github.com/redis/hiredis

 #1.创建一个放工程文件的文件夹 与redis安装包同级别
   mkdir /home/tang/redisprj
 #2.修改环境变量
   vim    ~/.bashrc
   source .bashrc
   
   vim  /etc/profile

   #2.1 动态库+静态库链接库文件   
      export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/tang/redis-7.2.0/deps/hiredis
      export LIBRARY_PATH=$LIBRARY_PATH
   #2.2 头文件
      #gcc头文件
       export C_INCLUDE_PATH=/usr/include
      #g++找到头文件的路径
       export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/include      
   #2.3 可执行文件
   export PATH =$PATH:/home/tang/redis-7.2.0/src

# 安装软件放在 /usr/local/include下  
   

1. 编写一个最基本的c文件。
       1.1编写test_main00.c,只输出一个字符串。

#include<stdio.h>
int main()
{
   printf("my test_main.c\n");
   return 0;
}

      1.2编译运行,看是否正常输出。

编译运行
gcc test_main00.c -o  testmain  # -o 编译后的应用程序名,可以有后缀也可以没有后缀
./testmain                      # 运行程序 ./表示当前文件夹       

2.编写1个调用hiredis set和get 的c文件
   2.1 编写文件

//1.连接
//2.发送
//3.处理返回
//4.清空
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <hiredis.h>
void main()
{
 redisContext *pc = redisConnect("127.0.0.1", 6379); //1.连接
   if (pc == NULL || pc->err)
   {
      if (pc) 
      {
          printf("Error: %s\n", pc->errstr);
      }
      else
      {
        printf("Can't allocate redis context\n");
      }
   }
  
    redisReply *psetreply;
    psetreply= redisCommand(pc, "PING");                                      //2.发送PING
    printf("PING: %s\n", psetreply->str);
    freeReplyObject(psetreply);

    psetreply= redisCommand(pc, "SET %s %s", "foo", "hello world");      //2.发送SET
    printf("SET: %s\n", psetreply->str);
    freeReplyObject(psetreply);

    psetreply= redisCommand(pc, "SET %b %b", "bar", (size_t) 3, "hello", (size_t) 5);      //2.发送
    printf("SET (binary API): %s\n", psetreply->str);
    freeReplyObject( psetreply);


//  reply = redisCommand(context, "SET foo %s", value);
//  reply = redisCommand(context, "SET foo %b", value, (size_t) valuelen);
//  reply = redisCommand(context, "SET key:%s %s", myid, value);

      
  //4.清空
  redisFree(pc);

  //5.get();
}

//1.连接
//2.发送
//3.处理返回
//4.清空

void get()
{
  
   redisContext *c = redisConnect("127.0.0.1", 6379); //1.连接
   if (c == NULL || c->err)
   {
      if (c) 
      {
          printf("Error: %s\n", c->errstr);
      }
      else
      {
        printf("Can't allocate redis context\n");
      }
   }
  
    redisReply *pgetreply;
    pgetreply= redisCommand(c, "GET foo");                          //2.GET foo
    printf("GET foo: %s\n", pgetreply->str);
    freeReplyObject(pgetreply);

    pgetreply= redisCommand(c, "INCR counter");            //2.GET
    printf("INCR counter: %lld\n", pgetreply->integer);
    freeReplyObject(pgetreply);

    pgetreply= redisCommand(c,"INCR counter");
    printf("INCR counter: %lld\n", pgetreply->integer);
    freeReplyObject(pgetreply);

    redisReply *reply ;
     /* Create a list of numbers, from 0 to 9 */
    reply = redisCommand(c,"DEL mylist");
    freeReplyObject(reply);
    for (int j = 0; j < 10; j++) {
        char buf[64];

        snprintf(buf,64,"%u",j);
        reply = redisCommand(c,"LPUSH mylist element-%s", buf);
        freeReplyObject(reply);
    }

    /* Let's check what we have inside the list */
    reply = redisCommand(c,"LRANGE mylist 0 -1");
    if (reply->type == REDIS_REPLY_ARRAY)
    {
        for ( int j = 0; j < reply->elements; j++) {
            printf("%u) %s\n", j, reply->element[j]->str);
        }
    }      
  //4.清空
  redisFree(c);


}

2.2 编译输出
 

gcc redis_mainsetget01.c -o  redis_mainsetget01 -L/home/tang/redis-7.2.0/deps/hiredis -lhiredis

  

2.3 远程连接
 

redis-cli -h [IP地址] -p [PORT端口号] -a [密码password]


 




 











   

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1071019.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为2023鲲鹏应用创新大赛,实在智能“信创RPA”再获殊荣

近期&#xff0c;面向全球开发者的顶级赛事鲲鹏应用创新大赛2023成功举办&#xff0c;旨在鼓励广大开发者基于鲲鹏全栈根技术&#xff0c;围绕产业真实难题&#xff0c;共同打造基础软/硬件解决方案&#xff0c;吸引了1400多支团队同台竞技&#xff0c;贡献了一场精彩纷呈的创新…

Java小白找工作必须领悟的修仙秘籍(一)

当我们走出校园&#xff0c;步入社会&#xff0c;必须得找工作&#xff0c;那么作为it小白你必须拥有过硬的基础应用知识&#xff0c;才能慢慢的适应工作的节奏&#xff0c;以下内容则都是基础中的基础&#xff0c;需要全部进行掌握&#xff0c;因为这里可能有你面试时需要回答…

极坐标系下的交换积分次序

极坐标系下的交换积分次序 我把极坐标系下的交换积分次序总结为动静与静动之间的转换&#xff0c;下面通过一个例子感受一下 ρ 1 、 ρ 1 cos ⁡ θ \rho1、\rho1\cos\theta ρ1、ρ1cosθ ∫ 0 π / 2 d θ ∫ 1 1 cos ⁡ θ f ( ρ cos ⁡ θ , ρ sin ⁡ θ ) ρ d…

openAI发布基于ChatGPT的AI绘画模型DALL·E3,话说stable-diffusion还香吗?

前期的文章&#xff0c;我们介绍过stable-diffusion的相关操作&#xff0c;stable diffusion模型是Stability AI开源的一个text-to-image的扩散模型&#xff0c;其模型在速度与质量上面有了质的突破&#xff0c;玩家们可以在自己消费级GPU上面来运行此模型&#xff0c;本模型基…

2023年能跨平台同步的笔记软件

对于当今的职场人士来说&#xff0c;记录和管理大量的信息已经成为了日常工作中不可或缺的一部分。无论是会议笔记、读书笔记、重要工作任务还是工作注意事项&#xff0c;如何高效地记录和管理这些内容&#xff0c;成为了职场人士关注的焦点。 如何记录这些笔记内容更加简单方…

定时器的基本原理和应用

题目背景 利用51单片机的定时/计数器T0的模式1实现间隔定时&#xff0c;每隔1秒L1指示灯闪烁一下&#xff0c;也就是亮0.5秒&#xff0c;熄灭0.5秒&#xff1b;每隔10秒L8指示灯闪烁一下&#xff0c;也就是也就是亮5秒&#xff0c;熄灭5秒。 分析 计数初值。 定时/计数器&…

《C++ Primer》第5章 语句

参考资料&#xff1a; 《C Primer》第5版《C Primer 习题集》第5版 5.1 简单语句&#xff08;P154&#xff09; 在一个表达式的末尾加上 ; 就构成了表达式语句&#xff0c;其作用是执行表达式并丢弃结果。 空语句 由单独的 ; 构成的语句为空语句。空语句常用于语法上需要一…

Nuget 镜像源地址过期,腾旭镜像源地址替换

Nuget过期 国内镜像源地址ssl认证过期了。Nuget无法搜索&#xff0c;一直还原报错 解决方法&#xff0c;替换腾旭镜像源地址 tencent_mirrors https://mirrors.cloud.tencent.com/nuget/

婴幼儿腹泻的原因与应对

引言&#xff1a; 腹泻是婴幼儿常见的健康问题之一&#xff0c;尤其在早期生活阶段&#xff0c;由于他们的消化系统尚未完全发育&#xff0c;容易受到各种因素的影响。腹泻不仅给婴幼儿带来不适&#xff0c;还可能导致脱水和营养不良。因此&#xff0c;了解婴幼儿腹泻的原因是…

【LeetCode刷题笔记】排序

905. 按奇偶排序数组 解题思路&#xff1a; 1&#xff09;额外数组 两次遍历&#xff0c;第一遍将所有的 偶数 放到结果数组 res 的前面&#xff0c;第二遍将所有的 奇数 接着放到结果数组 res 的后面。也可以使用 对撞指针 往结果数组里存&#xff0c;在 一次遍历 内搞定。 2…

Ubuntu20.04 配置 yolov5_ros 功能包记录

文章目录 本文参考自博主源801,结合自己踩坑后修改 项目地址:https://github.com/mats-robotics/yolov5_ros 1.新建工作空间 新建一个工作空间 yolo_ros(名字可自定义),在 yolo_ros 下新建文件夹 src 并catkin_make进行编译 2. 安装相机驱动,可以选用较为主流的 usb_cam 或…

2024年杭州电子科技大学工商管理硕士/工程管理硕士联考网报指南

2024年MBA/MEM考试网上报名流程网报时间根据《2024年全国硕士研究生招生工作管理规定》要求&#xff0c;研招统考网上正式报名时间为2023年10月8日至10月25日&#xff0c;每天9:00—22:00。网上预报名时间为2023年9月24日至9月27日&#xff0c;每天9:00—22:00&#xff08;报名…

S5PV210裸机(四):按键中断

本文主要探讨轮询按键和中断安按键的相关知识。 按键 无按下&#xff0c;GPIO引脚处高电平&#xff0c;电路断开 按下&#xff0c;GPIO引脚接低电平&#xff0c;电路导通 SoC内部通过检测GPIO电平高低判断按键作为SoC的输入信号 按键响应 轮询…

IPETRONIK数据采集设备携手Softing Q-Vision软件致力于ADAS测试方案

一 背景 汽车ADAS技术是当下国内外的重点研究方向&#xff0c;且ADAS的发展水平和市场竞争力紧密相关&#xff0c;因此一套完善的ADAS测试方案对各整车厂而言非常重要。然而&#xff0c;国内ADAS测试却面临着很多阻碍&#xff0c;主要原因在于&#xff1a;相关测试设备昂贵&am…

关于LinkedBlockingQueue的offer的正确用法,如何保证阻塞

我们在做一些并发操作时&#xff0c;常常会使用到LinkedBlockingQueue 也会使用offer方法来往队列中插入数据 我们一直觉得使用offer后&#xff0c;当队列满了&#xff0c;新增加的元素会阻塞插入线程&#xff0c;然后一直等待到队列有空间后再插入。然而测试后发现并不是这样。…

7. Java本项目知识基础---上篇

Java本项目知识快速入门 1. idea项目打开、关闭、复制 正常关闭&#xff1a; 正常打开&#xff1a; 正常复制&#xff1a; 2. idea快捷键 保存&#xff1a;ctrls 撤销&#xff1a;ctrlz 还原&#xff1a;ctrlshiftz 复制:ctrlc 粘贴:ctrlv 快速复制粘贴:ctrld 删除行:c…

MySQL MVCC多版本并发控制机制原理详解

目录 一、前言二、MVCC解决了什么问题三、MVCC核心 Undo Log 和 Read View 介绍3.1、Undo Log&#xff08;日志版本链&#xff09;3.2、Read View&#xff08;一致性视图&#xff09;3.2.1、设计思路3.2.2、ReadView判断规则 四、数据准备五、举例探究MVCC机制5.1、例子执行流程…

直流负载箱的维护和保养方法有哪些?

直流负载箱的维护和保养方法主要包括以下几个方面&#xff1a; 日常要定期清洁负载箱的外壳和散热器&#xff0c;确保散热良好&#xff0c;避免灰尘积累影响散热效果。还要定期检查负载箱的连接器&#xff0c;确保连接良好&#xff0c;避免接触不良或松动导致故障。根据使用要求…

信创之国产浪潮电脑+统信UOS操作系统体验3:使用 visual studio code搭建Python开发环境

☞ ░ 前往老猿Python博客 ░ https://blog.csdn.net/LaoYuanPython 一、引言 老猿原来在windows下开发python程序&#xff0c;要么使用python自带的IDLE&#xff0c;要么使用pycharm&#xff0c;IDLE用来开发很不方便&#xff0c;而pycharm对开发支持比较好&#xff0c;换成…

我做了一个简易P图(参数图)分析软件

P图(即参数图&#xff0c;Parameter Diagram)&#xff0c;是一个结构化的工具&#xff0c;帮助大家对产品更好地进行分析。 典型P图格式 P图最好是和FMEA软件联动起来&#xff0c;如国可工软的FMEA软件有P图分析这个功能。 单纯的P图分析软件很少&#xff0c;为了方便做P图分…