C++ で Redis のデータを読む (Read)
redis_read.cpp
// --------------------------------------------------------------------
/*
redis_read.cpp
May/31/2018
*/
// --------------------------------------------------------------------
#include <iostream>
#include <boost/algorithm/string.hpp>
#include <arpa/inet.h>
using namespace std;
#define PORT 6379
// --------------------------------------------------------------------
string redis_received_data_parser
(ssize_t bytes_recieved,char incoming_data_buffer[])
{
string str_rvalue;
vector<string> vv;
boost::algorithm::split (vv,incoming_data_buffer,boost::is_any_of("\n"));
if (vv[0][1] == '-')
{
str_rvalue = "";
}
else
{
str_rvalue = vv[1];
}
return str_rvalue;
}
// --------------------------------------------------------------------
void json_record_display (string key_in,int valread,char buffer[])
{
cout << key_in << "\t";
cout << valread << "\n";
string json_str = redis_received_data_parser (valread,buffer);
cout << json_str << "\n";
}
// --------------------------------------------------------------------
int main (int argc,char *argv[])
{
cerr << "*** 開始 ***\n";
sockaddr_in address;
sockaddr_in serv_addr;
int sock = 0;
char buffer[1024] = {0};
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
printf("\n Socket creation error \n");
return -1;
}
memset(&serv_addr, '0', sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(PORT);
if(inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr)<=0)
{
printf("\nInvalid address/ Address not supported \n");
return -1;
}
printf("sock = %d\n",sock);
printf("sizeof(serv_addr) = %ld\n",sizeof(serv_addr));
if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0)
{
printf("\nConnection Failed \n");
return -1;
}
string keys[] = {"t1851","t1852","t1853","t1854","t1855",
"t1856","t1857","t1858","t1859"};
const int nmax = 9;
for (int it=0; it < nmax; it++)
{
const string key = keys[it];
cerr << "it = " << it << "\t";
cerr << "key = " << key << "\t";
const string str_aa = "get " + key + "\r\n";
const char *hello = str_aa.c_str();
send(sock , hello , strlen(hello) , 0 );
int valread = read( sock , buffer, 1024);
// printf("%s\n",buffer );
json_record_display (key,valread,buffer);
}
cerr << "*** 終了 ***\n";
return 0;
}
// --------------------------------------------------------------------
Makefile
redis_read: redis_read.cpp
clang++ -o redis_read redis_read.cpp -ljson11
clean:
rm -f redis_read
実行結果
$ ./redis_read
*** 開始 ***
sock = 3
sizeof(serv_addr) = 16
it = 0 key = t1851 t1851 71
{"date_mod": "1922-8-27", "name": "福井", "population": 76129}
it = 1 key = t1852 t1852 70
{"date_mod": "1922-2-2", "name": "敦賀", "population": 98637}
it = 2 key = t1853 t1853 71
{"date_mod": "1922-7-21", "name": "小浜", "population": 42915}
it = 3 key = t1854 t1854 71
{"date_mod": "1922-5-25", "name": "大野", "population": 51238}
it = 4 key = t1855 t1855 70
{"date_mod": "1922-1-5", "name": "勝山", "population": 83471}
it = 5 key = t1856 t1856 71
{"date_mod": "1922-9-22", "name": "鯖江", "population": 71249}
it = 6 key = t1857 t1857 74
{"date_mod": "1922-7-17", "name": "あわら", "population": 46185}
it = 7 key = t1858 t1858 70
{"date_mod": "1922-3-4", "name": "越前", "population": 61873}
it = 8 key = t1859 t1859 70
{"date_mod": "1922-7-9", "name": "坂井", "population": 74923}
*** 終了 ***
次のバージョンで確認しました。
$ clang++ --version
clang version 11.1.0
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
Author And Source
この問題について(C++ で Redis のデータを読む (Read)), 我々は、より多くの情報をここで見つけました https://qiita.com/ekzemplaro/items/8e67c07839d077ef8889著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .