#include #include #include namespace MR = myx::redis; class RedisClient : public QObject { Q_OBJECT MR::Client m_client; MR::Client m_subscribe; MR::Request* m_request; MR::Request* m_channel; public: RedisClient( QObject* parent = nullptr ) : QObject( parent ) { connect( &m_client, &MR::Client::connected, this, &RedisClient::slotConnected ); connect( &m_subscribe, &MR::Client::connected, this, &RedisClient::slotStartSubscribe ); m_client.connectToHost( "127.0.0.1" ); m_subscribe.connectToHost( "127.0.0.1" ); } virtual ~RedisClient() {} Q_SLOT void slotStartSubscribe() { m_channel = m_subscribe.subscribeToChannel( "test" ); connect( m_channel, &MR::Request::reply, this, &RedisClient::slotSubscribeTest ); } Q_SLOT void slotSubscribeTest( MR::Reply reply ) { qDebug() << static_cast< int >( reply.type() ); auto& v = reply.value(); if ( !v.canConvert< QVariantList >() ) { return; } auto l = v.toList(); for ( auto& a: l ) { qDebug() << a.value< MR::Reply >().value().toByteArray(); } } Q_SLOT void slotConnected() { m_request = m_client.sendCommand( "PING" ); connect( m_request, &MR::Request::reply, this, &RedisClient::slotPong ); } Q_SLOT void slotPong( MR::Reply reply ) { qDebug() << static_cast< int >( reply.type() ); qDebug() << reply.value().toString(); m_request->disconnect(); m_request->deleteLater(); m_request = m_client.sendCommand( "SET value 10" ); connect( m_request, &MR::Request::reply, this, &RedisClient::slotSetValue ); } Q_SLOT void slotSetValue( MR::Reply reply ) { qDebug() << static_cast< int >( reply.type() ); qDebug() << reply.value().toString(); m_request->disconnect(); m_request->deleteLater(); m_request = m_client.sendCommand( "GET value" ); connect( m_request, &MR::Request::reply, this, &RedisClient::slotGetValue ); } Q_SLOT void slotGetValue( MR::Reply reply ) { qDebug() << static_cast< int >( reply.type() ); qDebug() << reply.value().toByteArray(); m_request->disconnect(); m_request->deleteLater(); } }; // class RedisClient