C++ 使用 hiredis 封装redis 的数据获取接口
整合自互联网
一、hiredis 类库的安装
tar -zxvf hiredis-v0.13.3.tar.gz
make
make install mkdir /usr/lib/hiredis
cp libhiredis.so /usr/lib/
//将动态连接库libhiredis.so至/usr/lib/
mkdir /usr/include/hiredis
cp hiredis.h /usr/include/hiredis //头文件包含#include<hiredis/hiredis.h>
二、封装 redisUtil.h 访问 实现 redis 的连接,按 key 来获取各个类型的数据
redisUtils.h
/*
* redis.h
*
* Created on: 2018年6月7日
* Author: oftenlin
*/ #ifndef REDIS_H_
#define REDIS_H_ #include <iostream>
#include <string.h>
#include <string>
#include <stdio.h>
#include <hiredis/hiredis.h> class Redis
{
public:
Redis();
~Redis();
bool connect(std::string host, int port);
std::string get(std::string key);
void set(std::string key, std::string value);
std::string hget(const char* key,const char* hkey);
int existsKey(const char* ID);
int del(const char* key);
int hset(const char* key,const char* hkey,const char* hvalue, size_t hvaluelen);
int hset(const char* key, const char* hkey, const char* value);
void lpush(std::string key, std::string value);
int lget(std::string key,int begin_index,int end_index);
private:
redisContext* _connect;
redisReply* _reply; }; #endif /* REDIS_H_ */
redisUtils.cpp
/*
* redis.cpp
*
* Created on: 2018年6月7日
* Author: oftenlin
*/ #include "redis.h" Redis::Redis(){ } Redis::~Redis()
{
this->_connect = NULL;
this->_reply = NULL;
} bool Redis::connect(std::string host, int port)
{
this->_connect = redisConnect(host.c_str(), port);
if(this->_connect != NULL && this->_connect->err)
{
printf("connect error: %s\n", this->_connect->errstr);
return ;
}
return ;
} std::string Redis::get(std::string key)
{
std::string str ="";
this->_reply = (redisReply*)redisCommand(this->_connect, "GET %s", key.c_str());
if(this->_reply==NULL){
return str;
}
str = this->_reply->str;
freeReplyObject(this->_reply);
return str; } void Redis::set(std::string key, std::string value)
{
redisCommand(this->_connect, "SET %s %s", key.c_str(), value.c_str());
} void Redis::lpush(std::string key, std::string value)
{
redisCommand(this->_connect, "LPUSH %s %s", key.c_str(), value.c_str());
} int Redis::lget(std::string key,int begin_index,int end_index){
/* Let's check what we have inside the list */
redisReply* reply = (redisReply*) redisCommand(this->_connect,"LRANGE %s %d %d",key.c_str(),begin_index,end_index);
if (reply->type == REDIS_REPLY_ARRAY) {
for (int j = ; j < reply->elements; j++) {
printf("%u) %s\n", j, reply->element[j]->str);
// data.push_back(_reply->element[j]->str); }
}
freeReplyObject(reply);
return ;
} std::string Redis::hget(const char* key,const char* hkey){
const char* argv[];
size_t argvlen[];
argv[] = "HGET";
argvlen[] = ;
argv[] = key;
argvlen[] = strlen(key);
argv[] = hkey;
argvlen[] = strlen(hkey);
redisReply* reply =(redisReply*) redisCommandArgv(this->_connect, , argv, argvlen);
std::string value;
if(reply->type != REDIS_REPLY_NIL){
value = std::string(reply->str,reply->str + reply->len);
}
freeReplyObject(reply);
return value;
}
int Redis::hset(const char* key, const char* hkey, const char* value){
redisReply* reply =(redisReply*) redisCommand(this->_connect, "HSET %s %s %s",key,hkey, value);
freeReplyObject(reply);
return ;
}
int Redis::hset(const char* key,const char* hkey,const char* hvalue, size_t hvaluelen){
const char* argv[];
size_t argvlen[];
argv[] = "HSET";
argvlen[] = ;
argv[] = key;
argvlen[] = strlen(key);
argv[] = hkey;
argvlen[] = strlen(hkey);
argv[] = hvalue;
argvlen[] = hvaluelen;
redisReply * reply =(redisReply*) redisCommandArgv(this->_connect, , argv, argvlen);
freeReplyObject(reply);
return ;
} int Redis::del(const char* key){
int res = ;
redisReply* reply = (redisReply*)redisCommand(this->_connect, "DEL %s", key);
if(reply->type == REDIS_REPLY_INTEGER){
if(reply->integer == 1L)
res = ;
}
freeReplyObject(reply);
return res;
} /*if Key ID exists*/
int Redis::existsKey(const char* ID){
redisReply * reply = (redisReply*)redisCommand(this->_connect,"exists %s",ID);
int res = ;
if(reply->type == REDIS_REPLY_INTEGER){
if(reply->integer == 1L)
res = ;
}
freeReplyObject(reply);
return res;
}
三、使用示例
#include "write2db/redis.h"
int main(int argc, char **argv) {
Redis *r = new Redis();
if(!r->connect("localhost", )){
printf("redis connect error!\n");
return ;
} std::string time_str = r->get("mykey"); }
C++ 使用 hiredis 封装redis 的数据获取接口的更多相关文章
- Sword redis C语言接口介绍
hiredis安装 hiredis是redis官方推荐的基于C接口的客户端组件,它提供接口,供c语言调用以操作数据库. 在redis的源码包的deps/hiredis下就有它的源码 安装方法,进入de ...
- Javascript面向对象特性实现封装、继承、接口详细案例——进级高手篇
Javascript面向对象特性实现(封装.继承.接口) Javascript作为弱类型语言,和Java.php等服务端脚本语言相比,拥有极强的灵活性.对于小型的web需求,在编写javascript ...
- 封装redis
封装redis import redis # r = redis.Redis() class MyRedis(): def __init__(self,ip,password,port=6379,db ...
- Javascript面向对象特性实现封装、继承、接口详细案例
Javascript面向对象特性实现(封装.继承.接口) Javascript作为弱类型语言,和Java.php等服务端脚本语言相比,拥有极强的灵活性.对于小型的web需求,在编写javascript ...
- Java代码封装redis工具类
maven依赖关系: <dependency> <groupId>redis.clients</groupId> <artifactId>jedis&l ...
- C语言使用hiredis访问redis
Hiredis 是Redis数据库的简约C客户端库.它是简约的,因为它只是增加了对协议的最小支持,但是同时它使用了一个高级别的 printf-like API,所以对于习惯了 printf 风格的C编 ...
- PHP封装curl的调用接口及常用函数
<?php /** * @desc 封装curl的调用接口,post的请求方式 */ function doCurlPostRequest($url, $requestString, $time ...
- 用ladon框架封装Python为Webservice接口以及调用接口的方法
一.用ladon框架封装Python为Webservice接口 功能实现的同时,希望将接口开放给别人,而封装python接口的一个再简单不过的框架Ladon,而且提供不同的协议,包括SOAP和Json ...
- 使用Nginx Lua实现redis高性能http接口
使用Nginx Lua实现redis高性能http接口 时间 -- :: 峰云就她了 原文 http://xiaorui.cc/2015/01/27/使用nginx-lua实现redis高性能http ...
随机推荐
- [Reinforcement Learning] 马尔可夫决策过程
在介绍马尔可夫决策过程之前,我们先介绍下情节性任务和连续性任务以及马尔可夫性. 情节性任务 vs. 连续任务 情节性任务(Episodic Tasks),所有的任务可以被可以分解成一系列情节,可以看作 ...
- Swift 4.0.2 按下tab bar item时, item会有内缩的animation效果(如同Twitter的tab bar 效果一样)
先上效果图: 假设 tab bar items 有5个.tag为0,1,2,3,4.storyboard中tab bar controller继承的class叫做xxxVC. class xxxVC: ...
- windows service创建使用整合
C#创建Windows Service(Windows 服务)基础教程 C#winform windows服务程序创建与安装 C#实现WinForm随WINDOWS服务一起启动
- c语言编译四大步
-o: 指定生成后的文件名,后面跟指定的名称 四步:-E 预处理 > -S 编译 > -c 汇编 > 链接 -E: 表示预处理,生成文件为.i,会做宏(define)定义的展开.头文 ...
- python—异常
异常是在程序中不可避免的,当程序遇到一个异常时程序就会停止,可以使用try—except进行处理异常,即便在出现异常程序也可以继续运行. 语法: try: 代码 except 异常名: 处理异常的代码 ...
- 数据库运维平台~Yearning测试与总结
一 部署 1 docker-compose up -d 即可非常方便 2 mysql安装 3 inception安装二 默认账号 默认用户admin 密码: Yearning_admi ...
- Ubuntu更新Python3及pip3
https://blog.csdn.net/good_tang/article/details/85001211 根据这篇文章的作者给出的方法进行的操作,但是其中出了两个问题: 我在操作之后重开bas ...
- 机器学习基石7-The VC Dimension
注: 文章中所有的图片均来自台湾大学林轩田<机器学习基石>课程. 笔记原作者:红色石头 微信公众号:AI有道 前几节课着重介绍了机器能够学习的条件并做了详细的推导和解释.机器能够学习必须满 ...
- docker安装小笔记
作者:邓聪聪 yum update Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker docker卸载旧版本(如 ...
- 深度学习之自编码器AutoEncoder
原文地址:https://blog.csdn.net/marsjhao/article/details/73480859 一.什么是自编码器(Autoencoder) 自动编码器是一种数据的压缩算法, ...