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

1.下载安装编译

|--------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---|
| | windows | linux | |
| 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++https://github.com/sewenew/redis-plus-plus

1.2 redis官网下载+安装+编译

如果下的是7的版本,不需要下hiredis.直接编译即可。

bash 复制代码
$ 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/

bash 复制代码
#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.14 | 7.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

bash 复制代码
./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

bash 复制代码
 #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,只输出一个字符串。

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

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

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

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

2.1 编写文件

bash 复制代码
//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();
}
bash 复制代码
//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 编译输出

bash 复制代码
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]
相关推荐
数据智能老司机1 小时前
CockroachDB权威指南——SQL调优
数据库·分布式·架构
数据智能老司机1 小时前
CockroachDB权威指南——应用设计与实现
数据库·分布式·架构
数据智能老司机1 小时前
CockroachDB权威指南——CockroachDB 模式设计
数据库·分布式·架构
数据智能老司机20 小时前
CockroachDB权威指南——CockroachDB SQL
数据库·分布式·架构
数据智能老司机20 小时前
CockroachDB权威指南——开始使用
数据库·分布式·架构
松果猿21 小时前
空间数据库学习(二)—— PostgreSQL数据库的备份转储和导入恢复
数据库
Kagol21 小时前
macOS 和 Windows 操作系统下如何安装和启动 MySQL / Redis 数据库
redis·后端·mysql
无名之逆21 小时前
Rust 开发提效神器:lombok-macros 宏库
服务器·开发语言·前端·数据库·后端·python·rust
s91236010121 小时前
rust 同时处理多个异步任务
java·数据库·rust
数据智能老司机21 小时前
CockroachDB权威指南——CockroachDB 架构
数据库·分布式·架构