通过C语言访问Redis

简要总结

我使用Redis官方提供的C驱动程序创建了一个访问Redis的示例,所以我想分享该源代码和操作步骤等。

环境建设

我预设的是CentOS。

yum update -y
yum install -y git gcc wget vim
# yumからインストール可能にする
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
rpm -Uvh remi-release-6*.rpm epel-release-6*.rpm
yum --enablerepo=remi,epel install -y redis
# ライブラリのインストール
git clone https://github.com/redis/hiredis.git
cd hiredis
make
make install

数据库配置

我会输入测试数据。

service redis start  # redisサーバ起動
redis-cli            # redisクライアント起動
# データ投入
set 1 aaa
set 2 bbb
set 3 ccc
exit                 # 終了

访问Redis

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

int main(void){
  redisContext *conn = NULL;
  redisReply *resp   = NULL;
  int loop           = 0;

  // 接続
  conn = redisConnect( "127.0.0.1" ,  // 接続先redisサーバ
                       6379           // ポート番号
         );
  if( ( NULL != conn ) && conn->err ){
    // error
    printf("error : %s\n" , conn->errstr );
    redisFree( conn );
    exit(-1);
  }else if( NULL == conn ){
    exit(-1);
  }

  // Valueの取得
  for( loop=1 ; loop < 4 ; loop++ ){
    resp = (redisReply *) redisCommand( conn ,          // コネクション
                                        "GET %d" , loop // コマンド
                                      );
    if( NULL == resp ){
      // error
      redisFree( conn );
      exit(-1);
    }
    if( REDIS_REPLY_ERROR == resp->type ){
      // error
      redisFree( conn );
      freeReplyObject( resp );
      exit(-1);
    }
    printf( "%d : %s\n" , loop , resp->str );
    freeReplyObject( resp );
  }

  // 後片づけ
  redisFree( conn );
  return 0;
}

编译并执行

gcc -Wall -o redis redis.c -lhiredis -L/usr/local/lib -I/usr/local/include/hiredis

我希望继续执行这部分代码,但在我的环境中找不到所需的库,因此会进行处理。

vi /etc/ld.so.conf.d/redis.conf/redis.conf  # 新規作成
# ファイル内容
/usr/local/lib  # 追記

ldconfig        # 設定反映

执行

./redis
1 : aaa
2 : bbb
3 : ccc