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 ...
随机推荐
- HDU - 3035 War(对偶图求最小割+最短路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3035 题意 给个图,求把s和t分开的最小割. 分析 实际顶点和边非常多,不能用最大流来求解.这道题要用 ...
- IDEA2019激活码集合(非盈利)
56ZS5PQ1RF-eyJsaWNlbnNlSWQiOiI1NlpTNVBRMVJGIiwibGljZW5zZWVOYW1lIjoi5q2j54mI5o6I5p2DIC4iLCJhc3NpZ25lZ ...
- (Python3) 九九乘法表 代码
for i in range(1,10): for j in range(1,10): print(i '*' j '=', i*j)
- kali linux工具--信息批量收集工具theharvester
在渗透测试早期阶段,安全人员往往需要从互联网快速获取目标的一些信息,以确认测试目标的概况.为了满足这个需求,Kali Linux提供了theharvester工具.该工具可以搜索引擎.社交网站获取目标 ...
- centos7-aliyun
# 安装EPEL和IUS软件源 yum install epel-release -y yum install https://centos7.iuscommunity.org/ius-release ...
- C# winform 播放资源中的音频文件
Mark一下 SoundPlayer simpleSound = new SoundPlayer(Properties.Resources.ResourceManager.GetStream(shen ...
- shell 批量修改较长字符串 字符串内容之间更换位置
cat 1.txt src='http://img2.tgbusdata.cn/v2/thumb/jpg/MkY5Myw2NTUsMzAzLDksMywxLC0xLDAscms1MCwxOTIuMTY ...
- 解决:在微信中访问app下载链接提示“已停止访问该网页”
前言 现如今微信对第三方推广链接的审核是越来越严格了,域名在微信中分享转发经常会被拦截,一旦被拦截用户就只能复制链接手动打开浏览器粘贴才能访问,要不然就是换个域名再推,周而复始.无论是哪一种情况都会面 ...
- 软件测试-Svn服务器搭建全过程-基于Centos6.7-64bit
本文详细介绍了在CentOs6.7-64bit服务器上搭建SVN版本控制服务 工具准备 CentOs6.7-64bit操作系统:关闭linux防火墙:设置定固IP--DHCP(动态):安装系统过程中开 ...
- 第十三节,OPenCV学习(二)图像的简单几何变换
图像的简单几何变换 几何变换不改变图像的像素值,只是在图像平面上进行像素的重新安排 适当的几何变换可以最大程度地消除由于成像角度.透视关系乃至镜头自身原因所造成的几何失真所产生的的负面影响. 一.图像 ...