1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

C++ で Redis のデータを読む (Read)

Last updated at Posted at 2018-05-31
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
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?