Build an application using C++

This page documents the preview (v2.21) version. Preview includes features under active development and is for development and testing only. For production, use the stable (v2024.1) version.

Prerequisites

The tutorial assumes that you have:

  • installed YugabyteDB, created a universe, and are able to interact with it using the Redis shell. If not, follow the steps in Quick start.
  • have C++ 11 or later.

Install the Redis C++ driver

We use the cpp_redis driver. To install the library do the following:

  • Clone the cpp_redis repository
$ git clone https://github.com/Cylix/cpp_redis.git
  • Get the networking module (tacopie)
$ cd cpp_redis
$ git submodule init && git submodule update
  • Create a build directory and move into it
$ mkdir build && cd build
  • Generate the Makefile using CMake
$ cmake .. -DCMAKE_BUILD_TYPE=Release
  • Build and install the library
$ make
$ make install

Write the HelloWorld C++ application

Create a file ybredis_hello_world.cpp and copy the contents below:

#include <cpp_redis/cpp_redis>

#include<iostream>
#include<vector>
#include<string>
#include<utility>
using namespace std;

int main() {
  cpp_redis::client client;

  client.connect("127.0.0.1", 6379, [](const std::string& host, std::size_t port, cpp_redis::client::connect_state status) {
    if (status == cpp_redis::client::connect_state::dropped) {
      std::cout << "client disconnected from " << host << ":" << port << std::endl;
    }
  });

  string userid = "1";
  vector<pair<string, string>> userProfile;
  userProfile.push_back(make_pair("name", "John"));
  userProfile.push_back(make_pair("age", "35"));
  userProfile.push_back(make_pair("language", "Redis"));

  // Insert the data
  client.hmset(userid, userProfile, [](cpp_redis::reply& reply) {
      cout<< "HMSET returned " << reply << ": id=1, name=John, age=35, language=Redis" << endl;
  });

  // Query the data
  client.hgetall(userid, [](cpp_redis::reply& reply) {
    std::vector<cpp_redis::reply> retVal;
    if (reply.is_array()) {
      retVal = reply.as_array();
    }
    cout << "Query result:" <<endl;
    for (int i = 0; i < retVal.size(); i=i+2) {
      cout << retVal[i] << "=" <<retVal[i+1] << endl;
    }
  });

  // synchronous commit, no timeout
  client.sync_commit();

  return 0;
}

Run the application

To compile the file, run the following command.

$ g++ -ltacopie -lcpp_redis -std=c++11 -o ybredis_hello_world ybredis_hello_world.cpp

To run the application, run the following command.

$ ./ybredis_hello_world

You should see the following output.

HMSET returned OK: id=1, name=John, age=35, language=Redis
Query result:
age=35
language=Redis
name=John