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 ...
随机推荐
- js 遍历集合删除元素
js 遍历集合删除元素 /** * 有效的方式 - 改变下标,控制遍历 */ for (var i = 0; i < arr.length; i++) { if (...) { arr.spli ...
- LINUX 常用命令(二)
B0.用户相关配置文件 用户信息文件: /etc/passwd密码文件: /etc/shadow用户组文件: /etc/group用户组密 ...
- Linux动态链接库的生成和使用
目录 1. 编写C程序 2. 编译动态链接库 3. 使用共享库 4. 执行程序 5. 参考资料 1. 编写C程序 比如编写myfunc.c文件,里面包含两个函数,一个是say_hello,另一个是ca ...
- 关于macOS 管理员(Admin)权限问题。
最近突然想改下用户名,于是在用户与组里解锁,然后两个手指点击用户那一行,更改fullname,不过出于好奇把uid和uuid也改了. 之后发现current user等级由Admin变成Standar ...
- Android防止手动添加的本地库文件被NDK工具清理掉
比如要添加一个名为libocr的本地库,先将libocr.so文件拷贝到jni目录下,然后在Android.mk文件中添加以下语句即可. 例: LOCAL_PATH := $(call my-dir) ...
- vue 移动端项目总结(mint-ui)
跨域解决方案 config/dev.env.js 'use strict' const merge = require('webpack-merge') const prodEnv = require ...
- MySQL数据库 Too many connections
出现这种错误明显就是 mysql_connect 之后忘记 mysql_close:当大量的connect之后,就会出现Too many connections的错误,mysql默认的连接为100个, ...
- Unity优化之贴图
默认情况下当你把图片导入到unity中时,unity会自动把图片转换成最适合当前平台的压缩格式.如果你有一些特殊的需求,unity也提供了覆盖默认压缩格式的方法,如下图 在图片的Inspector窗口 ...
- C# 根据出生日期(年月日)计算年龄的代码
public int GetAgeByBirthdate(DateTime birthdate) { DateTime now = DateTime.Now; int age = now.Year - ...
- 2019年Python、Golang、Java、C++如何选择?
前言 作为开发者我们都知道,开发后台语言可选择的方向会很多,比如,Java,go,Python,C/C++,PHP,NodeJs….等很多,这么多语言都有什么样的优势?如果让你学习一门后端语言,又该如 ...