#include "qRedis.h"
qRedis::qRedis(QString host, int port, QObject *parent) : QObject(parent)
{
this->host = host;
this->port = port;
reader = new Reader(host, port);
connect(reader, SIGNAL(response(QVariant)), this, SLOT(response(QVariant)));
}
qRedis::~qRedis()
{
delete reader;
}
bool qRedis::openConnection()
{
connectHost(host,port);
QEventLoop loop;
connect(reader, SIGNAL(connected()), &loop, SLOT(quit()));
loop.exec();
if(!reader->isConnected())
{
return false;
}
return true;
}
void qRedis::connectHost(const QString &host, const quint16 port)
{
reader->connectHost(host,port);
connect(reader, SIGNAL(connected()), this, SLOT(slotConnected()));
}
void qRedis::disconnectHost()
{
reader->disconnectHost();
}
void qRedis::slotConnected()
{
connect(reader, SIGNAL(disconnected()), this, SLOT(slotDisconnected()));
emit connected();
}
void qRedis::slotDisconnected()
{
emit disconnected();
}
/* Redis Public API */
void qRedis::publish(QString channel, QString message)
{
QString cmd;
cmd.append("PUBLISH ");
cmd.append(channel);
cmd.append(" ");
cmd.append(message);
reader->sendData(cmd);
}
void qRedis::subscribe(QString channel)
{
QString cmd;
cmd.append("SUBSCRIBE ");
cmd.append(channel);
reader->sendData(cmd);
}
void qRedis::unsubscribe(QString channel)
{
QString cmd;
cmd.append("UNSUBSCRIBE ");
cmd.append(channel);
reader->sendData(cmd);
}
void qRedis::psubscribe(QString channel)
{
QString cmd;
cmd.append("PSUBSCRIBE ");
cmd.append(channel);
reader->sendData(cmd);
}
void qRedis::punsubscribe(QString channel)
{
QString cmd;
cmd.append("PUNSUBSCRIBE ");
cmd.append(channel);
reader->sendData(cmd);
}
void qRedis::response(QVariant response)
{
QStringList res = response.toStringList();
Reply reply;
if (res[1] == "message")
{
reply.type = res[0];
reply.message = res[1];
reply.channel = res[2];
reply.value = res[3];
emit returnData(reply);
}
else if (res[1] == "pmessage")
{
reply.type = res[0];
reply.message = res[1];
reply.pattern = res[2];
reply.channel = res[3];
reply.value = res[4];
emit returnData(reply);
}
else
{
responseData = res;
}
}
qRedis::Reply qRedis::command(QString cmd)
{
Reply reply;
reader->sendData(cmd);
QEventLoop loop;
connect(reader, SIGNAL(response(QVariant)), &loop, SLOT(quit()));
loop.exec();
if(responseData[0] == "integer")
{
reply.type = responseData[0];
reply.value = responseData[1].toInt();
}
else if(responseData[0] == "list")
{
reply.type = responseData[0];
QStringList list;
for(int i=1; i < responseData.length(); i++)
{
list << responseData[i];
}
reply.value = list;
}
else
{
reply.type = responseData[0];
reply.value = responseData[1];
}
return reply;
}
int qRedis::append(QString key, QString value)
{
QString cmd("APPEND ");
cmd.append(key);
cmd.append(" ");
cmd.append(value);
Reply reply = command(cmd);
return reply.value.toInt();
}
bool qRedis::auth(QString password)
{
QString cmd("AUTH ");
cmd.append(password);
Reply reply = command(cmd);
if(reply.value.toString() == "OK")
return true;
return false;
}
QStringList qRedis::blpop(QString key, int timeout)
{
QString cmd("BLPOP ");
cmd.append(key);
cmd.append(" ");
cmd.append(QString::number(timeout));
Reply reply = command(cmd);
return reply.value.toStringList();
}
QStringList qRedis::brpop(QString key, int timeout)
{
QString cmd("BRPOP ");
cmd.append(key);
cmd.append(" ");
cmd.append(QString::number(timeout));
Reply reply = command(cmd);
return reply.value.toStringList();
}
QStringList qRedis::brpoplpush(QString source, QString destination, int timeout)
{
QString cmd("BRPOPLPUSH ");
cmd.append(source);
cmd.append(" ");
cmd.append(destination);
cmd.append(" ");
cmd.append(QString::number(timeout));
Reply reply = command(cmd);
return reply.value.toStringList();
}
int qRedis::decr(QString key)
{
QString cmd("DECR ");
cmd.append(key);
Reply reply = command(cmd);
return reply.value.toInt();
}
int qRedis::decrby(QString key,int interval)
{
QString cmd("DECRBY ");
cmd.append(key);
cmd.append(" ");
cmd.append(QString::number(interval));
Reply reply = command(cmd);
return reply.value.toInt();
}
int qRedis::del(QString key)
{
QString cmd("DEL ");
cmd.append(key);
Reply reply = command(cmd);
return reply.value.toInt();
}
QString qRedis::dump(QString key)
{
QString cmd("DUMP ");
cmd.append(key);
Reply reply = command(cmd);
return reply.value.toString();
}
bool qRedis::exists(QString key)
{
QString cmd("EXISTS ");
cmd.append(key);
Reply reply = command(cmd);
return reply.value.toBool();
}
bool qRedis::expire(QString key,int seconds)
{
QString cmd("EXPIRE ");
cmd.append(key);
cmd.append(" ");
cmd.append(QString::number(seconds));
Reply reply = command(cmd);
return reply.value.toBool();
}
bool qRedis::expireat(QString key, qint64 timestamp)
{
QString cmd("EXPIREAT ");
cmd.append(key);
cmd.append(" ");
cmd.append(QString::number(timestamp));
Reply reply = command(cmd);
return reply.value.toBool();
}
QVariant qRedis::eval(QString script, int numkeys, QString keys, QString arguments)
{
QString cmd("EVAL ");
cmd.append(script);
cmd.append(" ");
cmd.append(QString::number(numkeys));
cmd.append(" ");
cmd.append(keys);
cmd.append(" ");
cmd.append(arguments);
Reply reply = command(cmd);
return reply.value;
}
QVariant qRedis::evalsha(QString sha1, int numkeys, QString keys, QString arguments)
{
QString cmd("EVALSHA ");
cmd.append(sha1);
cmd.append(" ");
cmd.append(QString::number(numkeys));
cmd.append(" ");
cmd.append(keys);
cmd.append(" ");
cmd.append(arguments);
Reply reply = command(cmd);
return reply.value;
}
QString qRedis::get(QString key)
{
QString cmd("GET ");
cmd.append(key);
Reply reply = command(cmd);
return reply.value.toString();
}
QString qRedis::getrange(QString key, int start, int stop)
{
QString cmd("GETRANGE ");
cmd.append(key);
cmd.append(" ");
cmd.append(QString::number(start));
cmd.append(" ");
cmd.append(QString::number(stop));
Reply reply = command(cmd);
return reply.value.toString();
}
int qRedis::hdel(QString key, QString field)
{
QString cmd("HDEL ");
cmd.append(key);
cmd.append(" ");
cmd.append(field);
Reply reply = command(cmd);
return reply.value.toInt();
}
bool qRedis::hexists(QString key, QString field)
{
QString cmd("HEXISTS ");
cmd.append(key);
cmd.append(" ");
cmd.append(field);
Reply reply = command(cmd);
return reply.value.toBool();
}
QString qRedis::hget(QString key, QString field)
{
QString cmd("HGET ");
cmd.append(key);
cmd.append(" ");
cmd.append(field);
Reply reply = command(cmd);
return reply.value.toString();
}
QMap<QString,QVariant> qRedis::hgetall(QString key)
{
QString cmd("HGETALL ");
cmd.append(key);
Reply reply = command(cmd);
QMap<QString,QVariant> keypairs;
QStringList list = reply.value.toStringList();
for(int i=0; i<list.length(); i++)
{
QString k = list[i];
i++;
QString v = list[i];
keypairs[k] = QString(v);
}
return keypairs;
}
int qRedis::hincrby(QString key, QString field, int increment)
{
QString cmd("HINCRBY ");
cmd.append(key);
cmd.appe
Qt 访问redis接口代码
5星 · 超过95%的资源 需积分: 34 145 浏览量
2015-03-16
19:55:38
上传
评论 10
收藏 165KB GZ 举报
@左左@右右
- 粉丝: 139
- 资源: 37
最新资源
- 毕业设计-仿生六足机器人的制作全教程源码+电子元器件+程序代码+线路组件图+安装教程+搭建视频教程
- 基于ROS和webots的xrobot机械臂仿真初探C++源码
- 基于ROS的点焊机器人仿真与控制python源码+文档说明+使用说明+详细注释
- 基于vue实现的细粒度交通时空大数据分析系统+源代码+文档说明
- 安卓大作业-基于Electron的交通时空大数据分析挖掘系统客户端(Android)+源代码+文档说明+界面截图
- 基于Java的朱氏集团客户关系管理系统设计源码
- 基于C++的作业提交与批改系统设计源码
- 基于Vue2的移动端电影资讯网站设计源码
- 高分课程设计作业-基于QT的模仿宝石迷阵游戏C++源码+文档说明+界面截图
- 基于Apache Spark的Spark DistCP重实现设计源码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
- 3
- 4
前往页