How to use Redis within a C++ program?

Viewed 40758

What would be the best way to use a Redis DB within a C++ program?

9 Answers

https://github.com/brianwatling/redispp

I've just released my c++ redis client on github. It's main feature right now is pipelining, I'll be adding more features soon, possibly sharding/consistent hashing next.

I wrote a C++ Redis client: redis-plus-plus. It's based on hiredis, and written in C++11. It supports the following features:

  • Most commands for Redis.
  • Connection pool.
  • Redis scripting.
  • Thread safe unless otherwise stated.
  • Redis publish/subscribe.
  • Redis pipeline.
  • Redis transaction.
  • Redis Cluster.
  • Redis Sentinel.
  • Redis Stream.
  • STL-like interface.
  • Generic command interface.

It's very fast, and easy to use. If you have any problem with this client, feel free to let me know. If you like it, also feel free to 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.
}

Check the doc for details.

Using a C bindings library? There doesn't seem to be a C++ wrapper available anywhere.

https://github.com/petrohi/hiredispp

Also check out hiredispp. It is far from complete, but very simplistic implementation that wraps around C based hiredis. Hiredis takes care of low level protocol and networking stuff while hiredispp wrappers just make it C++ friendly.

If you care about performance, give a try for bredis. It uses c++ 14 and boost::asio and has not other dependencies (i.e. no hiredis nor libev etc.). Its usage might be not as convenient as the other C++ libraries, but that was trade off by design in the sake of performance and maximum flexibility.

bredis much more easy to use on Windows, as it has no hiredis dependency.

Related