C
Redis

CでRedisにアクセスする

More than 1 year has passed since last update.


概要

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へアクセス


redis.c

#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