| 824 | } |
| 825 | |
| 826 | void WorkThread::doBatchDelKeyWork() { |
| 827 | |
| 828 | if(!prepare()) { |
| 829 | emit runError(_taskMsg->_taskid,_string); |
| 830 | emit finishWork(_taskMsg->_taskid); |
| 831 | return; |
| 832 | } |
| 833 | |
| 834 | if(cancle()) |
| 835 | return; |
| 836 | |
| 837 | _sendMsg = *_taskMsg; |
| 838 | _sendMsg._list.clear(); |
| 839 | qlonglong llret; |
| 840 | QString key; |
| 841 | int keyNum; |
| 842 | QStringList vKeyPattern = _taskMsg->_keyPattern.split(_taskMsg->_key, QString::SkipEmptyParts); |
| 843 | for(int i = 0; i < vKeyPattern.size(); ++i) { |
| 844 | _sendMsg._key = vKeyPattern[i]; |
| 845 | do { |
| 846 | if(_redisClient->scan(vKeyPattern[i], _respValue, _cursor, BATCH_SCAN_NUM)) { |
| 847 | _cursor = _respValue._arrayValue[0]._stringValue.toLongLong(); |
| 848 | key.clear(); |
| 849 | keyNum = 0; |
| 850 | for(int j = 0; j < _respValue._arrayValue[1]._arrayValue.size(); ++j) { |
| 851 | key = QString(_respValue._arrayValue[1]._arrayValue[j]._stringValue); |
| 852 | if(!_redisClient->del(key, llret)) { |
| 853 | llret = 0; |
| 854 | emit runError(_taskMsg->_taskid, QString("delete key %1 failed").arg(key)); |
| 855 | continue; |
| 856 | } |
| 857 | keyNum += llret; |
| 858 | } |
| 859 | _sendMsg._sequence = keyNum; |
| 860 | emit sendData(_sendMsg); |
| 861 | } else { |
| 862 | _cursor = 0; |
| 863 | } |
| 864 | _respValue.init(); |
| 865 | _sendMsg._list.clear(); |
| 866 | if(cancle()) |
| 867 | return; |
| 868 | } while(_cursor); |
| 869 | if(cancle()) |
| 870 | return; |
| 871 | } |
| 872 | |
| 873 | destroy(); |
| 874 | } |
| 875 | |
| 876 | void WorkThread::doBatchScanKeyWork() |
| 877 | { |