web-dev-qa-db-ja.com

C ++プログラム内でRedisを使用するにはどうすればよいですか?

C++プログラム内でRedisDBを使用するための最良の方法は何でしょうか?

17
dan

Cバインディング ライブラリを使用していますか?どこでも利用できるC++ラッパーはないようです。

4

架空のredis-cplusplus-clientをフォークし、redis-server v2.0と互換性を持たせ、欠落しているapi呼び出しを追加し、コンシステントハッシュを実装しました。近い将来、stl型のように使用できる高レベルクラスの初期状態もあります(shared_string、shared_int、shared_setなど)。まだ本番環境に対応しているものはありませんが、提供されているテストは正常に実行されています:-)

http://github.com/mrpi/redis-cplusplus-client

13
Ludger Sprenker

https://github.com/brianwatling/redispp

Githubでc ++ redisクライアントをリリースしました。現在の主な機能はパイプラインです。まもなく機能を追加する予定です。次はシャーディング/コンシステントハッシュ法を使用する可能性があります。

5
brian watling

C++クライアントの公式リスト

redis.io上のRedis C++クライアント完全なリストを調べてください。ブースト、Qtなどに基づいて、さまざまなクライアントがあります。現時点では、C++クライアントの実装のいずれも「推奨」としてマークされていないことに注意してください。ただし、推奨されるCクライアント hiredis があり、C++では問題なく動作するはずです。

5
feuGene

http://github.com/fictorial/redis-cplusplus-client

ただし、実際にC++を使用してRedisと通信する人はほとんどいないため、このC++クライアントライブラリは維持されていません。

4
z8000

私はC++ Redisクライアントを作成しました: redis-plus-plus 。これはhiredisに基づいており、C++ 11で記述されています。次の機能をサポートします。

  • Redisのほとんどのコマンド。
  • 接続プール。
  • Redisスクリプト。
  • 特に明記されていない限り、スレッドセーフです。
  • Redisのパブリッシュ/サブスクライブ。
  • Redisパイプライン。
  • Redisトランザクション。
  • Redisクラスター。
  • Redisセンチネル。
  • Redisストリーム。
  • STLのようなインターフェース。
  • 汎用コマンドインターフェイス。

非常に高速で使いやすいです。このクライアントで問題が発生した場合は、お気軽に お知らせください 。よろしければ、お気軽に star it :)

#include <sw/redis++/redis++.h>
using namespace sw::redis;

try {
    Redis redis("tcp://127.0.0.1:6379");

    redis.set("key", "val");
    auto val = redis.get("key");
    if (val) {
        // dereference val to get the value of string type.
        std::cout << *val << std::endl;
    }   // else key doesn't exist.

    redis.rpush("list", {"a", "b", "c"});
    std::vector<std::string> list;
    redis.lrange("list", 0, -1, std::back_inserter(list));

    // put a vector<string> to Redis list.
    redis.rpush("another-list", list.begin(), list.end());

    auto tx = redis.transaction();

    auto tx_replies = tx.incr("num0")
                        .incr("num1")
                        .mget({"num0", "num1"})
                        .exec();

    auto redis_cluster = RedisCluster("tcp://127.0.0.1:7000");

    // RedisCluster has similar interface as Redis.
    redis_cluster.set("key", "value");
    val = redis_cluster.get("key");
} catch (const Error &err) {
    // error handling.
}

詳細については、 doc を確認してください。

3
for_stack

https://github.com/petrohi/hiredispp

また、hiredisppもチェックしてください。これは完全にはほど遠いですが、Cベースのhiredisをラップする非常に単純な実装です。 Hiredisは低レベルのプロトコルとネットワーク関連のものを処理しますが、hiredisppラッパーはC++に対応します。

2
Peter Hizalev

別のC++クライアントはここにあります: https://github.com/luca3m/redis3m

これはhiredisのラッパーであり、Nice C++クラス、高可用性接続プール、および実装済みですぐに使用できる一連のパターンを備えています。

1
Luca Marturana

パフォーマンスが気になる場合は、 bredis を試してみてください。 C++ 14とboost::asioを使用し、他の依存関係はありません(つまり、hiredislibevもありません)。その使用法は他のC++ライブラリほど便利ではないかもしれませんが、パフォーマンスと最大の柔軟性のために設計上トレードオフされていました。

bredishiredisの依存関係がないため、Windowsでの使用がはるかに簡単です。

0
Ivan Baidakou