Skip to content

Commit e453bd5

Browse files
author
zhoudian
committed
1. 查询最大的条数-树型组件;2. string组件,大于40960,截取40960。
1 parent 85a7252 commit e453bd5

File tree

6 files changed

+165
-39
lines changed

6 files changed

+165
-39
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "QuickRedis",
3-
"version": "2.7.0",
3+
"version": "2.7.1",
44
"license": "MIT",
55
"private": true,
66
"description": "QuickRedis",

src/app/App.js

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@ import SplitPane from "react-split-pane";
88
import HeartbeatService from "@/services/HeartbeatService";
99
import CheckUpdateService from "@/services/CheckUpdateService";
1010
import "@/app/index.css";
11-
import { notification } from "antd";
12-
import intl from "react-intl-universal";
1311

1412
class App extends Component {
1513
// left width = 300(minSize)+15(line)+
@@ -18,14 +16,6 @@ class App extends Component {
1816
this.resize();
1917
HeartbeatService.start();
2018
CheckUpdateService.start();
21-
22-
notification.open({
23-
message: intl.get("notification.support.host.key.tree.title"),
24-
description: intl.get(
25-
"notification.support.host.key.tree.description"
26-
),
27-
onClick: () => {},
28-
});
2919
}
3020
resize() {
3121
this.refs.hostTagDiv.style.width =

src/pages/HostKey/index.js

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -82,9 +82,12 @@ class HostKey extends Component {
8282
* @memberof HostKey
8383
*/
8484
loadRedisDataByPattern(tableData, pattern, cursor, originalKey) {
85-
let redis = this.props.node.redis;
85+
let redisArr = [this.props.node.redis];
86+
if (this.props.node.data.connectType === CONNECT_TYPE.CLUSTER) {
87+
redisArr = this.props.node.redis.nodes("master");
88+
}
8689
let patternBuffer = BufferUtils.hexToBuffer(pattern);
87-
redis.scanBuffer(
90+
redisArr[0].scanBuffer(
8891
cursor,
8992
"MATCH",
9093
patternBuffer,
@@ -123,8 +126,7 @@ class HostKey extends Component {
123126
}
124127
let strCursor = BufferUtils.bufferToString(res[0]);
125128
if (
126-
this.state.tableTotal <
127-
REDIS_DATA_SHOW.MAX_SEARCH_DATA_SIZE &&
129+
tableData.length < REDIS_DATA_SHOW.MAX_SEARCH_DATA_SIZE &&
128130
strCursor !== "0"
129131
) {
130132
this.loadRedisDataByPattern(
@@ -136,7 +138,7 @@ class HostKey extends Component {
136138
} else {
137139
let firstTableDataNode = [];
138140
let tableDataTmp = tableData;
139-
if (tableData[0] != undefined && tableData[0].isHit) {
141+
if (tableData[0] !== undefined && tableData[0].isHit) {
140142
firstTableDataNode.push(tableData[0]);
141143
tableDataTmp = tableData.slice(1, tableData.length);
142144
}
@@ -149,7 +151,7 @@ class HostKey extends Component {
149151
this.setState({
150152
tableData: tableData,
151153
tableTotal: tableData.length,
152-
searchDisable: false
154+
searchDisable: false,
153155
});
154156
}
155157
}

src/pages/HostKeyString/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ class HostKeyString extends Component {
5252
}
5353
value = BufferUtils.bufferToString(value);
5454
value = lodash.truncate(value, {
55-
length: 102400,
55+
length: 40960,
5656
omission: "......",
5757
});
5858
let autoFormatJson =

src/pages/HostKeyTree/index.js

Lines changed: 153 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,19 @@ import {
1616
import { DeleteTwoTone } from "@ant-design/icons";
1717
import { message } from "antd";
1818
import { SearchOutlined } from "@ant-design/icons";
19-
import { REDIS_DATA_TYPE, CONNECT_TYPE } from "@/utils/constant";
19+
import {
20+
REDIS_DATA_TYPE,
21+
CONNECT_TYPE,
22+
REDIS_DATA_SHOW,
23+
} from "@/utils/constant";
2024
import "@/pages/CommonCss/zebra.css";
2125
import uuid from "node-uuid";
2226
import Log from "@/services/LogService";
2327
import KeysHistoryService from "@/services/KeysHistoryService";
2428
import LocaleUtils from "@/utils/LocaleUtils";
25-
import intl from "react-intl-universal";
2629
import BufferUtils from "@/utils/BufferUtils";
30+
import { notification } from "antd";
31+
import intl from "react-intl-universal";
2732
var lodash = window.require("lodash");
2833
const { Search } = Input;
2934
const { Option } = Select;
@@ -155,6 +160,123 @@ class HostKeyTree extends Component {
155160
}
156161
}
157162
}
163+
/**
164+
*加载 redis key
165+
*
166+
* @param {*} pattern
167+
* @param {*} cursor
168+
* @param {*} originalKey
169+
* @memberof HostKeyTree
170+
*/
171+
loadRedisDataByPattern(tableData, pattern, cursor, originalKey) {
172+
let redisArr = [this.props.node.redis];
173+
if (this.props.node.data.connectType === CONNECT_TYPE.CLUSTER) {
174+
redisArr = this.props.node.redis.nodes("master");
175+
}
176+
let patternBuffer = BufferUtils.hexToBuffer(pattern);
177+
redisArr[0].scanBuffer(
178+
cursor,
179+
"MATCH",
180+
patternBuffer,
181+
"COUNT",
182+
REDIS_DATA_SHOW.FETCH_DATA_SIZE,
183+
(err, res) => {
184+
if (err) {
185+
this.setState({ searchDisable: false });
186+
message.error("" + err);
187+
Log.error(
188+
"[cmd=HostKeyTree] loadRedisDataByPattern error",
189+
pattern,
190+
cursor,
191+
originalKey,
192+
err
193+
);
194+
return;
195+
}
196+
let data = [];
197+
for (let i = 0; i < res[1].length; i++) {
198+
let strRes = BufferUtils.bufferToString(res[1][i]);
199+
if (strRes === originalKey) {
200+
continue;
201+
}
202+
data.push(strRes);
203+
}
204+
if (data.length !== 0) {
205+
tableData = [...tableData, ...data];
206+
// 如果key存在,则添加到搜索历史记录
207+
let host = this.props.node.data.host;
208+
let port = this.props.node.data.port;
209+
KeysHistoryService.addKeysHistory(host, port, originalKey);
210+
}
211+
let strCursor = BufferUtils.bufferToString(res[0]);
212+
if (
213+
tableData.length <
214+
REDIS_DATA_SHOW.MAX_SEARCH_DATA_SIZE_TREE &&
215+
strCursor !== "0"
216+
) {
217+
this.loadRedisDataByPattern(
218+
tableData,
219+
pattern,
220+
strCursor,
221+
originalKey
222+
);
223+
} else {
224+
if (
225+
tableData.length >=
226+
REDIS_DATA_SHOW.MAX_SEARCH_DATA_SIZE_TREE
227+
) {
228+
message.info(
229+
"符合条件的数据条数太大。只显示:" +
230+
REDIS_DATA_SHOW.MAX_SEARCH_DATA_SIZE_TREE
231+
);
232+
}
233+
let treeData = [];
234+
if (
235+
tableData !== null &&
236+
tableData !== undefined &&
237+
tableData.length !== 0
238+
) {
239+
// 先对key进行排序
240+
tableData = lodash.orderBy(tableData);
241+
let rootTreeMap = new Map();
242+
for (let i = 0; i < tableData.length; i++) {
243+
let keyTemp = tableData[i];
244+
let childKeyArr = keyTemp.split(this.splitSign);
245+
let childMap = rootTreeMap.get(childKeyArr[0]);
246+
if (childMap === null || childMap === undefined) {
247+
childMap = new Map();
248+
}
249+
rootTreeMap.set(childKeyArr[0], childMap);
250+
if (childKeyArr.length > 1) {
251+
this.keyArrToTreeMap(
252+
childMap,
253+
childKeyArr.slice(1, childKeyArr.length)
254+
);
255+
} else {
256+
rootTreeMap.set(
257+
childKeyArr[0] + this.splitEndSign,
258+
undefined
259+
);
260+
}
261+
}
262+
// 如果key存在,则添加到搜索历史记录
263+
let host = this.props.node.data.host;
264+
let port = this.props.node.data.port;
265+
KeysHistoryService.addKeysHistory(
266+
host,
267+
port,
268+
originalKey
269+
);
270+
this.treeMapToTreeData(rootTreeMap, treeData, "");
271+
}
272+
this.setState({
273+
treeData: treeData,
274+
searchDisable: false,
275+
});
276+
}
277+
}
278+
);
279+
}
158280
/**
159281
* 加载 redis key
160282
* @param {*} pattern
@@ -178,9 +300,7 @@ class HostKeyTree extends Component {
178300
let treeData = [];
179301
if (res !== null && res !== undefined && res.length !== 0) {
180302
// 先对key进行排序
181-
res = lodash.orderBy(
182-
res
183-
);
303+
res = lodash.orderBy(res);
184304
let rootTreeMap = new Map();
185305
for (let i = 0; i < res.length; i++) {
186306
let keyTemp = BufferUtils.bufferToString(res[i]);
@@ -226,7 +346,17 @@ class HostKeyTree extends Component {
226346
* @memberof HostKeyTree
227347
*/
228348
searchKey(key) {
229-
this.loadRedisKeysByPattern(key);
349+
if (key === null || key === undefined || key === "") {
350+
key = "*";
351+
}
352+
this.setState({
353+
treeData: [],
354+
searchDisable: true,
355+
});
356+
let tableData = [];
357+
let pattern = "*" + key + "*";
358+
let cursor = "0";
359+
this.loadRedisDataByPattern(tableData, pattern, cursor, key);
230360
}
231361
/**
232362
* 打开 创建key 窗口
@@ -309,18 +439,20 @@ class HostKeyTree extends Component {
309439
}
310440
);
311441
} else if (keyType === REDIS_DATA_TYPE.HASH) {
312-
redis.hsetBuffer(keyBuffer, "default-member", "default-value").then(
313-
(value) => {
314-
this.okCreateKeyMadalSuccess(key, keyType);
315-
},
316-
(err) => {
317-
message.error("" + err);
318-
Log.error(
319-
"HostKeyTree okCreateKeyMadal hash error",
320-
err
321-
);
322-
}
323-
);
442+
redis
443+
.hsetBuffer(keyBuffer, "default-member", "default-value")
444+
.then(
445+
(value) => {
446+
this.okCreateKeyMadalSuccess(key, keyType);
447+
},
448+
(err) => {
449+
message.error("" + err);
450+
Log.error(
451+
"HostKeyTree okCreateKeyMadal hash error",
452+
err
453+
);
454+
}
455+
);
324456
} else if (keyType === REDIS_DATA_TYPE.LIST) {
325457
redis.lpushBuffer(keyBuffer, "default-member").then(
326458
(value) => {
@@ -404,15 +536,15 @@ class HostKeyTree extends Component {
404536
for (let i = 0; i < res.length; i++) {
405537
let key = res[i];
406538
redis.del(key).then(
407-
(value) => { },
539+
(value) => {},
408540
(err) => {
409541
message.error(
410542
"del key error. key: " + key + ". " + err
411543
);
412544
Log.error(
413545
"clickTreeRightClickMenu del key error. key: " +
414-
key +
415-
". ",
546+
key +
547+
". ",
416548
err
417549
);
418550
}

src/utils/constant.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ export const REDIS_DATA_SHOW = {
2929
FETCH_DATA_SIZE: 5000,
3030
// 查询最大的条数
3131
MAX_SEARCH_DATA_SIZE: 10000,
32+
// 查询最大的条数-树型组件
33+
MAX_SEARCH_DATA_SIZE_TREE: 20000,
3234
// redis处理返回的成功的值
3335
REDIS_HANDLE_SUCCESS: 1,
3436
// redis处理返回的失败的值

0 commit comments

Comments
 (0)