C++连接redis

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的命令可以通过函数参数传入,命令返回的结果如果需要可以通过字符串分割的方式存储



  • 5
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值