【学习笔记】C++操作redis库
来源:互联网 发布:java中框架的作用 编辑:程序博客网 时间:2024/06/03 11:01
前段时间,在写一个后台服务框架,底层要用到redis的操作。因为编程语言用的是C++,而且是在Linux下,因此想要操作redis,必须要通过hiredis接口来实现。下面将介绍一下hiredis接口的用法。
hiredis主要包括4个方法,灵活运用这4个方法,就可以对redis进行操作了。
1. redisContext* redisConnectWithTimeout(const char *ip, int port, const struct timeval tv)
该函数用来连接redis库,ip为redis地址,port为redis端口号,tv为连接超时的时间。redisContext是hiredis里定义的一个结构体类型,包含错误标志、连接类型、链接地址、端口号等信息。使用这个命令时要注意判断返回值是否为空,判断错误标志是否为0,以及判断连接是否超时等。
2. void *redisCommand(redisContext *c, const char *format, ...)
该函数用于执行redis数据库中的命令,第一个参数为redis建立连接后,返回的redisContext值,第二个参数为对redis要执行的命令操作。此函数的返回值为void*,但是一般都会强制转换为redisReply类型,以便做进一步的处理。
3. void freeReplyObject(void *reply)
该函数用于释放redisCommand执行后返回的redisReply占用的内存。
4. void redisFree(redisContext* c)
该函数用于释放redisConnect和redisConnectWithTimeout建立的连接。
hiredis主要包括4个方法,灵活运用这4个方法,就可以对redis进行操作了。
1. redisContext* redisConnectWithTimeout(const char *ip, int port, const struct timeval tv)
该函数用来连接redis库,ip为redis地址,port为redis端口号,tv为连接超时的时间。redisContext是hiredis里定义的一个结构体类型,包含错误标志、连接类型、链接地址、端口号等信息。使用这个命令时要注意判断返回值是否为空,判断错误标志是否为0,以及判断连接是否超时等。
2. void *redisCommand(redisContext *c, const char *format, ...)
该函数用于执行redis数据库中的命令,第一个参数为redis建立连接后,返回的redisContext值,第二个参数为对redis要执行的命令操作。此函数的返回值为void*,但是一般都会强制转换为redisReply类型,以便做进一步的处理。
3. void freeReplyObject(void *reply)
该函数用于释放redisCommand执行后返回的redisReply占用的内存。
4. void redisFree(redisContext* c)
该函数用于释放redisConnect和redisConnectWithTimeout建立的连接。
下面我们就通过一个简单的例子来实现对redis的操作。
#include <iostream>#include <string>#include <stdio.h>#include <hiredis/hiredis.h>#include <sys/time.h>#include <time.h>using namespace std;char *m_szRedisHost="127.0.0.1"; //redis地址uint16_t m_iRedisPort=6379; //redis端口int timeout=4000000; //超时时间struct timeval m_RedisTimeout;m_RedisTimeout.tv_sec=timeout / 1000000;m_RedisTimeout.tv_usec=timeout % 1000000;bool RedisConnectWithTimeout(redisContext* redis_context){ if (redis_context != NULL) { redisFree(redis_context); } redis_context = redisConnectWithTimeout( m_szRedisHost, m_iRedisPort, m_RedisTimeout); if (redis_context == NULL or redis_context->err) { printf("Connect to redisServer faile\n"); return false; } if (redisSetTimeout(redis_context, m_RedisTimeout) != REDIS_OK) { printf("Connect to redisServer time out\n"); return false; } return true;}void GetData(redisContext* redis_context,string &strUserId,string &result){ redisReply *reply; string strCommand = "HGET user_" + strUserId; reply = static_cast<redisReply*>(redisCommand(redis_context, strCommand.c_str())); if (reply == NULL) { printf("Get Data failed\n"); redisFree(redis_context); return; } if (reply->type != REDIS_REPLY_STRING) { freeReplyObject(reply); return; } result = string(reply->str, reply->len); freeReplyObject(reply);}int main(){ redisContext* redis_context; string userId = "01"; string result; if (RedisConnectWithTimeout(redis_context)) { GetData(redis_context,userId,result); } return 0;}
0 0
- 【学习笔记】C++操作redis库
- python操作redis学习笔记
- 学习笔记:Python操作Redis
- Redis学习笔记-Jedis操作Redis
- [Redis学习笔记]-Spring 操作Redis
- redis学习笔记二(常规操作)
- Redis学习笔记(三)java redis 基本操作
- Redis学习笔记二:Redis的常用操作命令
- Redis学习笔记二:Redis的常用操作命令
- Redis学习笔记--hiredis(C语言)
- Redis学习笔记(五)jedis(JedisCluster)操作Redis集群 redis-cluster
- c/c++采用acl库操作redis
- redis 命令操作笔记
- Redis入门操作笔记
- Redis学习笔记二 CentOS下的基本操作
- C 学习笔记: 移位操作练习。
- C学习笔记10--文件操作
- Objective-C学习笔记-之操作文件
- 关于SEG 指令
- C++中cin.getline()、getline()、cin.get()区别
- javascript实现简单日期下拉选择器
- MySql 里的IFNULL、NULLIF和ISNULL用法
- Ajax异步方式实现登录与参数的校验
- 【学习笔记】C++操作redis库
- 关于tabs如何跳转页面的问题
- 屏幕兼容性问题
- 消息队列中间件的技术选型分析
- Hibernate注解
- show slave status判断主从同步状态
- oc内存管理 ---自动释放池
- Dnw下载工具还是Linux下的好(For OK6410)
- JS学习十六天----单例模式