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 ...
随机推荐
- 1. Nagios和 NagiosQL安装及配置
目录 1. Nagios 和 NagiosQL简介 2. Nagios+NagiosQL搭建环境说明 3. Nagios.Nagios-plugins和NagiosQL的安装 4. 配置NagiosQ ...
- shell拼写检查,利用Linux字典
rename #find path -type f -name "*.mp3" -exec mv { } target_dir \; #mp3 file mv dir_file ...
- 统一配置管理 windows linux ide maven gradle docker 【渐进式备份更新~~】
Tips 系统盘放轻量配置(%HOMEPATH%),仓库盘放大容量文件(自己维护一份 语义化目录结构.txt). Tips 系统盘放 不经常写操作的文件(除轻量配置) ...
- 20164305 徐广皓 Exp4 恶意代码分析
实践目标 1.1是监控你自己系统的运行状态,看有没有可疑的程序在运行. 1.2是分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分析工具尽量使用原生指令或sysinternals,systr ...
- 解决MySQL Access denied for user 'root'@'IP地址' 问题
1.mysql -u root -p 登陆进MYSQL: 2.执行以下命令: GRANT ALL PRIVILEGES ON *.* TO 'your name'@'%' IDENTIFIED BY ...
- vue老司机
你和答案之间只差一个关键字 1.对象二级查找值渲染早于数据获取 解决vue.js 数据渲染成功仍报错的问题
- The SetStack Computer UVA - 12096
题意:初始状态的栈内包含一个空集,对栈进行一下操作: PUSH:向栈内压入一个空集 DUP:复制栈顶,并压入栈内 UNION:将栈顶端两个集合出栈,并将两个元素的并集入栈 INTERSECT:将栈顶端 ...
- 2018-2019-2 《网络对抗技术》Exp0 Kali安装 Week1 20165237
2018-2019-2 <网络对抗技术>Exp0 Kali安装 Week1 20165237 安装虚拟机 首先创建虚拟机 创建好虚拟机后,打开虚拟机进行安装.第一步选择Graphcal i ...
- node.js+mongodb 爬虫
demo截图: 本demo爬瓜子二手车北京区的数据 (注:需要略懂 node.js / mongodb 不懂也没关系 因为我也不懂啊~~~) 之所以选择爬瓜子二手车网站有两点: 一.网站无需登录,少做 ...
- psutil(搬运,一个月后稍后修改)
psutil是一个跨平台库,能够轻松实现获取系统运行的进程和系统利用率(包括CPU.内存.磁盘.网络等)信息.它主要用来做系统监控,性能分析,进程管理 安装:pip install psutil 1. ...