c++连接redis 密码
2017-04-09 20:20:26 u012234115 阅读数 11527

redis是很好机遇key-value的缓存数据库,但是一直缺乏一个好的C++调用接口,官方有个hiredis的C接口,但是只能在linux下用

这里简单介绍了一个开源的基于C++11和boos::asio的跨平台redis接口,可以实现C++操作redis,本文在windows环境下使用的,linux同理


来源

github地址:https://github.com/nekipelov/redisclient


使用


1,安装好redis,开启redis server

2,代码下载下来之后,目录结构如下

其中:
  • src目录里面就是所有用到的api,基于boost::asio写的,可以跨平台调用
  • examples里面是一些跟redis连接的例子
  • tests里面有单元测试的例子
3,创建demo工程
将src目录拷贝到demo工程目录,并配置好boost库

编写同步和异步两种方式的应用实例
#include <iostream>
#include <string>
#include <vector>
#include <functional>
#include "boost/asio/io_service.hpp"
#include "boost/asio/ip/address.hpp"
#include "redisclient/redissyncclient.h"
#include "redisclient/redisasyncclient.h"

// 设置redis服务器的ip和port
const boost::asio::ip::address server_address = boost::asio::ip::address::from_string("127.0.0.1");
const unsigned short server_port = 6379;

// 同步方式连接操作
void handleRedisSyncClient(
	boost::asio::io_service &io_service,
	boost::asio::ip::address address,
	unsigned short port)
{
	// 定义redisclient
	redisclient::RedisSyncClient redis(io_service);
	std::string errmsg;

	if (!redis.connect(address, port, errmsg))
		std::cerr << "Can't connect to redis: " << errmsg << std::endl;

	redisclient::RedisValue result;

	// 执行redis命令
	//result = redis.command("lpush", {"list", "value1"});
	//result = redis.command("lpush", {"list", "value2"});

	//if (result.isError())
	//	std::cerr << "error: " << result.toString() << "\n";

	result = redis.command("lrange", {"list", "0", "1"});

	if (result.isOk())
		std::cout << result.toString() << "\n";
	else
		std::cerr << "error: " << result.toString() << "\n";
}

// 异步方式连接操作
void handleRedisAsycClient(
	boost::asio::io_service &ioService, 
	redisclient::RedisAsyncClient &redis_client,
	std::string &key,
	std::string &value,
	bool ok, 
	const std::string &errmsg)
{
	if (ok)
	{
		// 发送指令
		redis_client.command("set", {key, value}, [&](const redisclient::RedisValue &v) {
			std::cout << "set: " << v.toString() << std::endl;
			
			// 获得回调,再调用指令
			redis_client.command("get", {key}, [&](const redisclient::RedisValue &v) {
				std::cerr << "get: " << v.toString() << std::endl;

				
				/*redis_client.command("del", {key}, [&](const redisclient::RedisValue &) {
					ioService.stop();
				});*/
			});
		});
	}
	else
	{
		std::cerr << "Can't connect to redis: " << errmsg << std::endl;
	}
}

int main(int argc, char **argv)
{
	boost::asio::io_service ioService;

	// 1,同步
	//handleRedisSyncClient(ioService, server_address, server_port);
	
	// 2,异步
	redisclient::RedisAsyncClient redis_client(ioService);
	std::string mykey = "age";
	std::string myvalue = "23";
	redis_client.asyncConnect(server_address, server_port,
		std::bind(
			&handleRedisAsycClient,
			std::ref(ioService), 
			std::ref(redis_client),
			std::ref(mykey),
			std::ref(myvalue),
			std::placeholders::_1,
			std::placeholders::_2));
	ioService.run();

	getchar();
	return 0;
}

4,通过redis可视化工具可以看到结果


其中,redis的命令可以通过函数参数传入,命令返回的结果如果需要可以通过字符串分割的方式存储



2018-05-25 10:43:46 larry_zeng1 阅读数 1059

redis是很好机遇key-value的缓存数据库,但是一直缺乏一个好的C++调用接口,官方有个hiredis的C接口,但是只能在linux下用

这里简单介绍了一个开源的基于C++11和boos::asio的跨平台redis接口,可以实现C++操作redis,本文在windows环境下使用的,linux同理


来源

github地址:https://github.com/nekipelov/redisclient


使用


1,安装好redis,开启redis server

2,代码下载下来之后,目录结构如下

其中:
  • src目录里面就是所有用到的api,基于boost::asio写的,可以跨平台调用
  • examples里面是一些跟redis连接的例子
  • tests里面有单元测试的例子
3,创建demo工程
将src目录拷贝到demo工程目录,并配置好boost库

编写同步和异步两种方式的应用实例
  1. #include <iostream>  
  2. #include <string>  
  3. #include <vector>  
  4. #include <functional>  
  5. #include "boost/asio/io_service.hpp"  
  6. #include "boost/asio/ip/address.hpp"  
  7. #include "redisclient/redissyncclient.h"  
  8. #include "redisclient/redisasyncclient.h"  
  9.   
  10. // 设置redis服务器的ip和port  
  11. const boost::asio::ip::address server_address = boost::asio::ip::address::from_string("127.0.0.1");  
  12. const unsigned short server_port = 6379;  
  13.   
  14. // 同步方式连接操作  
  15. void handleRedisSyncClient(  
  16.     boost::asio::io_service &io_service,  
  17.     boost::asio::ip::address address,  
  18.     unsigned short port)  
  19. {  
  20.     // 定义redisclient  
  21.     redisclient::RedisSyncClient redis(io_service);  
  22.     std::string errmsg;  
  23.   
  24.     if (!redis.connect(address, port, errmsg))  
  25.         std::cerr << "Can't connect to redis: " << errmsg << std::endl;  
  26.   
  27.     redisclient::RedisValue result;  
  28.   
  29.     // 执行redis命令  
  30.     //result = redis.command("lpush", {"list", "value1"});  
  31.     //result = redis.command("lpush", {"list", "value2"});  
  32.   
  33.     //if (result.isError())  
  34.     //  std::cerr << "error: " << result.toString() << "\n";  
  35.   
  36.     result = redis.command("lrange", {"list""0""1"});  
  37.   
  38.     if (result.isOk())  
  39.         std::cout << result.toString() << "\n";  
  40.     else  
  41.         std::cerr << "error: " << result.toString() << "\n";  
  42. }  
  43.   
  44. // 异步方式连接操作  
  45. void handleRedisAsycClient(  
  46.     boost::asio::io_service &ioService,   
  47.     redisclient::RedisAsyncClient &redis_client,  
  48.     std::string &key,  
  49.     std::string &value,  
  50.     bool ok,   
  51.     const std::string &errmsg)  
  52. {  
  53.     if (ok)  
  54.     {  
  55.         // 发送指令  
  56.         redis_client.command("set", {key, value}, [&](const redisclient::RedisValue &v) {  
  57.             std::cout << "set: " << v.toString() << std::endl;  
  58.               
  59.             // 获得回调,再调用指令  
  60.             redis_client.command("get", {key}, [&](const redisclient::RedisValue &v) {  
  61.                 std::cerr << "get: " << v.toString() << std::endl;  
  62.   
  63.                   
  64.                 /*redis_client.command("del", {key}, [&](const redisclient::RedisValue &) { 
  65.                     ioService.stop(); 
  66.                 });*/  
  67.             });  
  68.         });  
  69.     }  
  70.     else  
  71.     {  
  72.         std::cerr << "Can't connect to redis: " << errmsg << std::endl;  
  73.     }  
  74. }  
  75.   
  76. int main(int argc, char **argv)  
  77. {  
  78.     boost::asio::io_service ioService;  
  79.   
  80.     // 1,同步  
  81.     //handleRedisSyncClient(ioService, server_address, server_port);  
  82.       
  83.     // 2,异步  
  84.     redisclient::RedisAsyncClient redis_client(ioService);  
  85.     std::string mykey = "age";  
  86.     std::string myvalue = "23";  
  87.     redis_client.asyncConnect(server_address, server_port,  
  88.         std::bind(  
  89.             &handleRedisAsycClient,  
  90.             std::ref(ioService),   
  91.             std::ref(redis_client),  
  92.             std::ref(mykey),  
  93.             std::ref(myvalue),  
  94.             std::placeholders::_1,  
  95.             std::placeholders::_2));  
  96.     ioService.run();  
  97.   
  98.     getchar();  
  99.     return 0;  
  100. }  

4,通过redis可视化工具可以看到结果


其中,redis的命令可以通过函数参数传入,命令返回的结果如果需要可以通过字符串分割的方式存储



 转载  https://blog.csdn.net/u012234115/article/details/69887098
2019-02-21 11:25:22 feinifi 阅读数 123

linux下c++连接redis,需要安装redis,同时还需要安装hiredis,hiredis是c++操作redis的api库。redis的安装这里不介绍了,很多教程。这里直接从hiredis安装说起。

1、下载hiredis,并解压。https://github.com/redis/hiredis

[root@server software]# wget https://github.com/redis/hiredis/archive/v0.14.0.tar.gz

[root@server software]# tar -xzf v0.14.0.tar.gz 
[root@server software]# ls
hiredis-0.14.0  maven  v0.14.0.tar.gz
[root@server software]# rm -f v0.14.0.tar.gz 
[root@server software]# ls
hiredis-0.14.0  maven
[root@server software]# cd hiredis-0.14.0/
[root@server hiredis-0.14.0]# ls
adapters      async.c  CHANGELOG.md  dict.c  examples   hiredis.c  Makefile  net.h   read.h     sdsalloc.h  sds.h   win32.h
appveyor.yml  async.h  COPYING       dict.h  fmacros.h  hiredis.h  net.c     read.c  README.md  sds.c       test.c

2、编译和安装hiredis,在hiredis解压目录下运行命令make,make install

3、编写简单的代码:

main.cpp

#include <iostream>
#include <hiredis/hiredis.h>
using namespace std;
int main(){
    redisContext *c = redisConnect("127.0.0.1",6379);
    if(c->err){
       redisFree(c);
       cout<<"connect to redis fail"<<endl;
       return 1;
    }
    cout<<"connect to redis success"<<endl;
    redisReply *r = (redisReply*)redisCommand(c,"get name");
    cout<<r->str<<endl;
    return 0;
} 

4、编译运行,在编译运行之前,我们需要启动redis,命令行连接redis,并设置键值name=hiredis

[root@server cppredis]# redis-cli
127.0.0.1:6379> set name hiredis
OK
127.0.0.1:6379> get name
"hiredis"
127.0.0.1:6379> exit
[root@server cppredis]# cat main.cpp 
#include <iostream>
#include <hiredis/hiredis.h>
using namespace std;
int main(){
    redisContext *c = redisConnect("127.0.0.1",6379);
    if(c->err){
       redisFree(c);
       cout<<"connect to redis fail"<<endl;
       return 1;
    }
    cout<<"connect to redis success"<<endl;
    redisReply *r = (redisReply*)redisCommand(c,"get name");
    cout<<r->str<<endl;
    return 0;
}
[root@server cppredis]# ls
main.cpp
[root@server cppredis]# g++ -lhiredis -o main main.cpp 
[root@server cppredis]# ls
main  main.cpp
[root@server cppredis]# ./main
connect to redis success
hiredis
[root@server cppredis]# 

这里唯一需要注意的,就是编译main.cpp时,需要加入-lhiredis参数,指定hiredis的库。

贴上编译运行结果截图:

2018-04-09 23:39:57 xuanandting 阅读数 490

首先C++要连接redis,我们先要去官网下载hiredis.

那么接下来用一个简单的例子来演示如何来连接redis.

//redistest.cpp
#include <stdio.h>
#include <hiredis/hiredis.h>

int main()
{
  redisContext* conn = redisConnect("127.0.0.1",6379);
  if(conn->err){
		printf("connection error:%s\n",conn->errstr);
  }

  redisReply* reply = (redisReply*)redisCommand(conn,"set foo 1234");
  freeReplyObject(reply);

  reply = (redisReply*)redisCommand(conn,"get foo");
  printf("%s\n",reply->str);
  freeReplyObject(reply);

  redisFree(conn);
  return 0;
}


首先我们要创建一个redis连接,创建的适合带上服务器ip以及redis默认的端口号6379;

再创建一个redis回复对象,redisReply是Redis命令回复对象 redis返回的信息保存在redisReply对象中;

再运行代码前,我们要启动redis即redis-server;

再编译运行代码g++ redistest.cpp -o redistest -lhiredis,再运行代码./redistest.

2017-06-09 14:48:48 lls2012 阅读数 269
#include <cstdio>
#include <hiredis.h>
#include <iostream>
#include <string>

int main()
{
	struct timeval timeout = { 2, 0 };    //2s的超时时间
	redisContext *pRedisContext = (redisContext*)redisConnectWithTimeout("127.0.0.1", 6379, timeout);
	if ((NULL == pRedisContext) || (pRedisContext->err))
	{
		if (pRedisContext)
		{
			std::cout << "connect error:" << pRedisContext->errstr << std::endl;
		}
		else
		{
			std::cout << "connect error: can't allocate redis context." << std::endl;
		}
		return -1;
	}

	redisReply *pRedisReply = (redisReply*)redisCommand(pRedisContext, "INFO");  //执行INFO命令
	std::cout << pRedisReply->str << std::endl;
	
	freeReplyObject(pRedisReply);

    return 0;
}

记vs2012 C++ 连接redis

阅读数 92

因为vs版本问题,坑了几天。。。注意:vs2012编译redis时,尽量选用redis2.6版本vs2012编译redis工程,生成x86和x64版本hiredis.lib建立vs项目工程vs工程下建立hiredis目录,再建立子目录include和libs,分别用来存放链接所有的头文件及lib库将redis-2.6\src中头文件和redis-2.6\dep...

博文 来自: a731062834

Ubuntu 16.04下安装Redis 以及C++连接Redis

阅读数 130

一、Redis介绍Redis是当前比较热门的NOSQL系统之一,它是一个key-value存储系统。和Memcache类似,但很大程度补偿了Memcache的不足,它支持存储的value类型相对更多,包括string、list、set、zset和hash。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作。在此基础上,Redis支持各种不同方式的排序...

博文 来自: ggm0928

Redis c/c++, java 客户端连接

阅读数 8219

Redis介绍redis这个想必大家都了解,关于redis的安装参考这里,redis使用文档参见这里。RedisC客户端的使用方法 Redis的c客户端Hiredis使用比较广泛,下面主要介绍下它。1,Hiredis的安装,配置Hiredis客户端在redis解压后的deps/hiredis下有相应的文件。如果你的安装包没有相应的文件可以到这里下载。cd

博文 来自: gfsfg8545

Redis c/c++, java client连接

阅读数 13

Redis介绍redis这个想必大家都了解,关于redis的安装參考这里,redis使用文档參见这里,英文文档。RedisCclient的用法 Redis的cclientHiredis使用比較广泛,以下主要介绍下它。1,Hiredis的安装,配置Hiredisclient在redis解压后的deps/hiredis下有对应的文件。假设你的安装包没有对应...

博文 来自: weixin_33709609

C++如何使用ACL 连接Redis

阅读数 749

初次尝试通过C++ACL库使用Redis。1、安装ACL2、如何使用ACL3、一个简单的例子连接Redis并添加一个string类型的键值

博文 来自: shayne123
没有更多推荐了,返回首页