Win7下访问redis,用vector存储查询结果
来源:互联网 发布:吕思勉 知乎 编辑:程序博客网 时间:2024/06/16 16:23
//通过代码实现获取key-value,用vector<struct>方式存储。
//【有错误或更好的方法,请大神指点或者给资源网址,方便我学习改善,谢谢】
#include <iostream>
#include <stdlib.h>#include <stdio.h>
#include <string.h>
#include <vector>
#include <hiredis.h>
extern "C"
{
#include <win32fixes.h>
}
#include <ICRSINT.H>
#include <windows.h>
using namespace std;
struct vyxyc
{
char* name;
char* value;
};
void redis()
{
WSADATA wsaData;
WSAStartup(MAKEWORD(2, 1), &wsaData);
redisContext *c;
redisReply* r;
struct timeval timeout = { 1, 500000 }; // 1.5 seconds
//redisContext* redisConnect(const char *ip, int port) //连接redis数据库
//redisContext* redisConnectWithTimeout(const char *ip, int port, timeval tv) //连接redis数据库
//void *redisCommand(redisContext *c, const char *format...) //执行redis数据库中的命令
//void freeReplyObject(void *reply) //释放redisCommand执行后返回的的redisReply所占用的内存
//void redisFree(redisContext *c) //释放redisConnect()所产生的连接
//c = redisConnectWithTimeout((char*)"127.0.0.1", 6379, timeout); //connect redis ok
c = redisConnect((char*)"127.0.0.1", 6379); //connect redis ok
if (c->err) {
printf("Connection error: %s\n", c->errstr);
redisFree(c);
exit(1);
}
else
{
printf("connect success\n");
}
//一次查询多个string类型值
/*
vector<string> vredis;
const char* cmd2 = "mget yx1 yx2 yx3";
r = (redisReply*)redisCommand(c, cmd2);
if (r->type != REDIS_REPLY_ARRAY)
{
printf("Failed %s\n", cmd2);
freeReplyObject(r);
redisFree(c);
//assert(2 == r->elements);
return;
}
for (int i = 0; i < r-> elements; i++)
{
redisReply* childReply = r->element[i];
if (childReply->type == REDIS_REPLY_STRING)
{
printf("the value is %s.\n", childReply->str);
vredis.push_back(childReply->str); //把实时值存到容器中
}
}
freeReplyObject(r);
printf("vredis size=%d\n", vredis.size());
//for (vector<string>::iterator myiter = vredis.begin(); myiter != vredis.end(); ++myiter)
for (int i = 0; i < vredis.size();i++)
{
printf("vredis[%d]= %f\n",i,atof(vredis[i].c_str()));//将string转double型
}
*/
// 先通过keys *查询出所有变量名[下面只是测试全部是string类型的情况],然后再查出对应的value
struct vyxyc syxyc;
vector<struct vyxyc> vyxyc;
const char* cmd2 = "keys yx*"; //取keys *,个人在redis中以yx开头的存的都是string类型
r = (redisReply*)redisCommand(c, cmd2);
if (r->type != REDIS_REPLY_ARRAY)
{
printf("Failed %s\n", cmd2);
freeReplyObject(r);
redisFree(c);
//assert(2 == r->elements);
return;
}
for (int i = 0; i < r->elements; i++)
{
redisReply* childReply = r->element[i];
if (childReply->type == REDIS_REPLY_STRING)
{
printf("the value is %s.\n", childReply->str);
syxyc.name = childReply->str; //存储key
//char* getstr = "get ";
//char* cmd3 = (char*)malloc(strlen(getstr) + strlen(childReply->str) + 1);
//strcpy(cmd3, getstr);
//strcat(cmd3, childReply->str);
//redisReply* rchild = (redisReply*)redisCommand(c, cmd3);
redisReply* rchild = (redisReply*)redisCommand(c, "get %s", childReply->str);//类似sprintf可以有多个拼接成命令
if (rchild->type != REDIS_REPLY_STRING)
{
printf("Failed get %s\n", childReply->str);
freeReplyObject(rchild);
redisFree(c);
return;
}
syxyc.value = rchild->str; //存储key对应的value
vyxyc.push_back(syxyc); //把实时值存到容器中
}
}
for (int i = 0; i < vyxyc.size(); i++)
{
printf("vyxyc[%d] name=%s,value=%s\n",i, vyxyc[i].name,vyxyc[i].value);
}
freeReplyObject(r);
redisFree(c);
}
int main(int argc, char *argv[])
{
redis();
system("pause");
}
//【有错误或更好的方法,请大神指点或者给资源网址,方便我学习改善,再次谢谢】
阅读全文
0 0
- Win7下访问redis,用vector存储查询结果
- ORACLE下存储过程返回查询结果
- Storm存储结果至Redis
- Win7下Redis安装
- select 查询存储过程结果
- 用存储过程将查询结果导出到EXCEL
- oracle 查询结果用逗号隔开(非存储过程)
- c 访问 redis 存储类型
- VECTOR 常用用法、存储、遍历访问
- Win7下python集成redis
- Win7下安装Redis服务
- 用C#调用存储过程返回结果集 & 连接查询结果的union
- Redis win7版 设置访问密码
- mysql存储过程 游标 查询结果循环
- mysql存储过程 游标 查询结果循环
- win7下用spring访问sql2005发生TCP/IP问题
- windows下使用Redis存储
- 存储过程在查询分析器中可运行出结果,但用程序调用无法得出结果
- Java通过第三方平台发送和验证手机验证码
- 机器学习 python编程库
- spring整合redis,配置文件设置。
- pandas读取csv文件进行处理时报错: TypeError: invalid type comparison
- MySQL
- Win7下访问redis,用vector存储查询结果
- BlendMode颜色混合模式枚举值
- 子序列的和(subsequence)
- 动态规划--至少取一个的分组背包--hdu3033 I love sneakers!
- 学生信息管理系统--知识小结(二)
- tomcat配置
- 12. Integer to Roman
- mysql 的 find_in_set函数使用方法
- 求逆序数两种方法:线段树/归并排序