アプリケーション開発ポータルサイト
ServerNote.NET
カテゴリー【RedisC/C++Debian
【Redisメモ・1】インストール、CLI、C言語からのアクセス
POSTED BY
2023-04-30

Redisはオンメモリで動作するKVS(Key-Value-Store)サーバーソフト。
検索値(Key)に対応する値(Value)を登録して、高速で抽出する用途で使われる。

1コア・1プロセス・1スレッドで動作する。
複数コアを使いたい場合ポートを変えて別デーモンとして立ち上げる。
ただしその数だけメモリの割り当てが必要。

データ型は以下の通り
文字列(Strings)
リスト(Lists)
セット(Sets)
ハッシュ(Hashes)
ソート済みセット(Sorded Sets)

インストール(Debian)

apt install redis-server

デーモンとして起動しているかチェック。

cd /etc/redis
redis.conf
...
daemonize yes
...

これがnoであったら、yesに変更して

/etc/init.d/redis-server restart

CLI(コマンドラインインタフェース)での操作

# CLI起動
redis-cli
# 現在のサーバー状態を表示
info
# 現在登録されているキーを表示
keys *
# テストデータを登録
set KEY-1 VALUE-1
set KEY-2 VALUE-2
set KEY-3 VALUE-3
# 現在登録されているキーを表示
keys *
1) "KEY-3"
2) "KEY-2"
3) "KEY-1"
# データの取り出し
get KEY-1
VALUE-1
get KEY-2
VALUE-2
get KEY-3
VALUE-3
# CLI終了
quit

次はクライアントライブラリをインストールしてプログラムからアクセスしてみる。
RedisはC言語で書かれた高速データ抽出を目的としたソフトであることを考えると、やはりクライアントライブラリもC言語を使いたいところ。

C言語ライブラリhiredisインストール

git clone https://github.com/redis/hiredis.git
cd hiredis/
make
sudo make install

ヘッダファイルは/usr/local/include/hiredisに入り、
ライブラリファイルは/usr/local/lib/libhiredis.soとなる。

上記CLIで作ったデータにアクセスするソースプログラム。

C/C++redistest.cGitHub Source
#include <stdio.h>
#include <hiredis/hiredis.h>
#include <stdlib.h>

extern int main(int argc, char **argv) {
  redisContext *con;
  redisReply *rep;
  int i;

  /* 接続 */
  con = redisConnect("127.0.0.1", 6379);
  if (!con) {
    fprintf(stderr, "redisConnect error\n");
    return -1;
  }
  if (con->err) {
    fprintf(stderr, "%s\n", con->errstr);
    redisFree(con);
    return -1;
  }

  /* データ表示 */
  for (i = 1; i <= 3; i++) {
    rep = (redisReply *)redisCommand(con, "GET KEY-%d", i);
    if (!rep) {
      fprintf(stderr, "redisReply error\n");
      redisFree(con);
      return -1;
    }
    if (rep->type != REDIS_REPLY_ERROR) {
      printf("KEY-%d = %s\n", i, rep->str);
    }
    freeReplyObject(rep);
  }

  /* 終了 */
  redisFree(con);
  return 0;
}

コンパイル

gcc -o redistest.x redistest.c -lhiredis

実行

./redistest.x

KEY-1 = VALUE-1
KEY-2 = VALUE-2
KEY-3 = VALUE-3

※本記事は当サイト管理人の個人的な備忘録です。本記事の参照又は付随ソースコード利用後にいかなる損害が発生しても当サイト及び管理人は一切責任を負いません。
※本記事内容の無断転載を禁じます。
【WEBMASTER/管理人】
自営業プログラマーです。お仕事ください!
ご連絡は以下アドレスまでお願いします★

【キーワード検索】