From dc0bf38988f3f6b6306c555313493f924acb8d5e Mon Sep 17 00:00:00 2001 From: zhoudian Date: Tue, 21 Dec 2021 23:36:59 +0800 Subject: [PATCH] =?UTF-8?q?cluster=20=E6=90=9C=E7=B4=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/HostKey/index.js | 118 +++++++++++++++++++-------------- src/pages/HostKeyTree/index.js | 110 +++++++++++++++--------------- src/utils/constant.js | 4 +- 3 files changed, 126 insertions(+), 106 deletions(-) diff --git a/src/pages/HostKey/index.js b/src/pages/HostKey/index.js index dfc71f4..900ce40 100644 --- a/src/pages/HostKey/index.js +++ b/src/pages/HostKey/index.js @@ -12,7 +12,11 @@ import { } from "antd"; import { message } from "antd"; import { SearchOutlined } from "@ant-design/icons"; -import { REDIS_DATA_TYPE, REDIS_DATA_SHOW } from "@/utils/constant"; +import { + REDIS_DATA_TYPE, + REDIS_DATA_SHOW, + CONNECT_TYPE, +} from "@/utils/constant"; import KeysHistoryService from "@/services/KeysHistoryService"; import Log from "@/services/LogService"; import "@/pages/CommonCss/zebra.css"; @@ -66,17 +70,7 @@ class HostKey extends Component { }; searchInput = React.createRef(); componentDidMount() { - let pattern = "*"; - let cursor = "0"; - this.setState({ tableData: [], searchDisable: true, currentPage: 1 }); - this.props.node.redis.select(this.props.db, (err, res) => { - if (err) { - message.error("" + err); - Log.error("[cmd=HostKey] componentDidMount error", err, res); - return; - } - this.loadRedisDataByPattern(pattern, cursor, "*"); - }); + this.searchKey("*"); this.props.triggerRef(this); } /** @@ -130,12 +124,26 @@ class HostKey extends Component { tableData: tableData, tableTotal: tableData.length, }); + } + if ( + this.state.tableTotal < + REDIS_DATA_SHOW.MAX_SEARCH_DATA_SIZE && + res[0] !== "0" + ) { + this.loadRedisDataByPattern(pattern, res[0], originalKey); + } else { // 如果key存在,则添加到搜索历史记录 - let host = this.props.node.data.host; - let port = this.props.node.data.port; - KeysHistoryService.addKeysHistory(host, port, originalKey); + if (this.state.tableTotal !== 0) { + let host = this.props.node.data.host; + let port = this.props.node.data.port; + KeysHistoryService.addKeysHistory( + host, + port, + originalKey + ); + } + this.setState({ searchDisable: false }); } - this.setState({ searchDisable: false }); } ); } @@ -155,41 +163,53 @@ class HostKey extends Component { currentPage: 1, tableTotal: 0, }); - let redis = this.props.node.redis; let directKey = "{我~~++==>>>>们}"; if (key.indexOf("*") === -1) { directKey = key; } - redis.keys(directKey).then( - (value) => { - let pattern = key; - let cursor = "0"; - pattern = "*" + pattern + "*"; - if (value !== null && value !== undefined && value.length > 0) { - // 关键字的key,如果存在,显示在第一页第一行 - let data = []; - data.push({ - key: key, - name: key, - }); - // 如果key存在,则添加到搜索历史记录 - let host = this.props.node.data.host; - let port = this.props.node.data.port; - KeysHistoryService.addKeysHistory(host, port, key); - let tableData = [...this.state.tableData, ...data]; - this.setState({ - tableData: tableData, - tableTotal: tableData.length, - }); + let redisArr = [this.props.node.redis]; + if (this.props.node.data.connectType === CONNECT_TYPE.CLUSTER) { + redisArr = this.props.node.redis.nodes("master"); + } + redisArr.map((redis) => { + redis.keys(directKey).then( + (value) => { + if ( + value !== null && + value !== undefined && + value.length > 0 + ) { + // 关键字的key,如果存在,显示在第一页第一行 + let data = []; + data.push({ + key: key, + name: key, + }); + // 如果key存在,则添加到搜索历史记录 + let host = this.props.node.data.host; + let port = this.props.node.data.port; + KeysHistoryService.addKeysHistory(host, port, key); + let tableData = [...this.state.tableData, ...data]; + this.setState({ + tableData: tableData, + tableTotal: tableData.length, + }); + } + let pattern = key; + let cursor = "0"; + pattern = "*" + pattern + "*"; + this.loadRedisDataByPattern(pattern, cursor, key); + }, + (err) => { + // keys 有可能被服务器禁用,所以即使失败,也继续进行loadRedisDataByPattern + Log.error("searchKey error", key, err); + let pattern = key; + let cursor = "0"; + pattern = "*" + pattern + "*"; + this.loadRedisDataByPattern(pattern, cursor, key); } - this.loadRedisDataByPattern(pattern, cursor, key); - }, - (err) => { - this.setState({ searchDisable: false }); - message.error("" + err); - Log.error("searchKey error", key); - } - ); + ); + }); } /** *改变页码 @@ -419,9 +439,11 @@ class HostKey extends Component { ref={this.searchInput} onSearch={this.searchKey.bind(this)} enterButton={ - + } - disabled={this.state.searchDisable} /> diff --git a/src/pages/HostKeyTree/index.js b/src/pages/HostKeyTree/index.js index ec91e37..93c94db 100644 --- a/src/pages/HostKeyTree/index.js +++ b/src/pages/HostKeyTree/index.js @@ -16,7 +16,7 @@ import { import { DeleteTwoTone } from "@ant-design/icons"; import { message } from "antd"; import { SearchOutlined } from "@ant-design/icons"; -import { REDIS_DATA_TYPE } from "@/utils/constant"; +import { REDIS_DATA_TYPE, CONNECT_TYPE } from "@/utils/constant"; import "@/pages/CommonCss/zebra.css"; import uuid from "node-uuid"; import Log from "@/services/LogService"; @@ -81,18 +81,7 @@ class HostKeyTree extends Component { componentDidMount() { // 获取配置的key分割符 this.splitSign = LocaleUtils.readSystemConfig().splitSign; - this.setState({ - treeData: [], - searchDisable: true, - }); - this.props.node.redis.select(this.props.db, (err, res) => { - if (err) { - message.error("" + err); - Log.error("HostKeyTree componentDidMount error", err, res); - return; - } - this.loadRedisKeysByPattern("*"); - }); + this.searchKey("*"); this.props.triggerRef(this); } /** @@ -177,52 +166,61 @@ class HostKeyTree extends Component { ) { pattern = "*" + originalKey + "*"; } - let redis = this.props.node.redis; - redis.keys(pattern).then( - (res) => { - this.setState({ - treeData: [], - searchDisable: true, - }); - let treeData = []; - if (res !== null && res !== undefined && res.length !== 0) { - let rootTreeMap = new Map(); - for (let i = 0; i < res.length; i++) { - let key = res[i]; - let childKeyArr = key.split(this.splitSign); - let childMap = rootTreeMap.get(childKeyArr[0]); - if (childMap === null || childMap === undefined) { - childMap = new Map(); - } - rootTreeMap.set(childKeyArr[0], childMap); - if (childKeyArr.length > 1) { - this.keyArrToTreeMap( - childMap, - childKeyArr.slice(1, childKeyArr.length) - ); - } else { - rootTreeMap.set( - childKeyArr[0] + this.splitEndSign, - undefined - ); + let redisArr = [this.props.node.redis]; + if (this.props.node.data.connectType === CONNECT_TYPE.CLUSTER) { + redisArr = this.props.node.redis.nodes("master"); + } + redisArr.map((redis) => { + redis.keys(pattern).then( + (res) => { + this.setState({ + treeData: [], + searchDisable: true, + }); + let treeData = []; + if (res !== null && res !== undefined && res.length !== 0) { + let rootTreeMap = new Map(); + for (let i = 0; i < res.length; i++) { + let key = res[i]; + let childKeyArr = key.split(this.splitSign); + let childMap = rootTreeMap.get(childKeyArr[0]); + if (childMap === null || childMap === undefined) { + childMap = new Map(); + } + rootTreeMap.set(childKeyArr[0], childMap); + if (childKeyArr.length > 1) { + this.keyArrToTreeMap( + childMap, + childKeyArr.slice(1, childKeyArr.length) + ); + } else { + rootTreeMap.set( + childKeyArr[0] + this.splitEndSign, + undefined + ); + } } + // 如果key存在,则添加到搜索历史记录 + let host = this.props.node.data.host; + let port = this.props.node.data.port; + KeysHistoryService.addKeysHistory( + host, + port, + originalKey + ); + this.treeMapToTreeData(rootTreeMap, treeData, ""); } - // 如果key存在,则添加到搜索历史记录 - let host = this.props.node.data.host; - let port = this.props.node.data.port; - KeysHistoryService.addKeysHistory(host, port, originalKey); - this.treeMapToTreeData(rootTreeMap, treeData, ""); + this.setState({ + treeData: treeData, + searchDisable: false, + }); + }, + (err) => { + message.error("loadRedisKeysByPattern error" + err); + Log.error("HostKeyTree loadRedisKeysByPattern error", err); } - this.setState({ - treeData: treeData, - searchDisable: false, - }); - }, - (err) => { - message.error("loadRedisKeysByPattern error" + err); - Log.error("HostKeyTree loadRedisKeysByPattern error", err); - } - ); + ); + }); } /** *搜索key diff --git a/src/utils/constant.js b/src/utils/constant.js index de5cd53..470d917 100644 --- a/src/utils/constant.js +++ b/src/utils/constant.js @@ -26,9 +26,9 @@ export const REDIS_DATA_TYPE = { // redis 数据显示组件使用 export const REDIS_DATA_SHOW = { // 批量获取数据的大小 - FETCH_DATA_SIZE: 10000, + FETCH_DATA_SIZE: 5000, // 查询最大的条数 - MAX_SEARCH_DATA_SIZE: 1000, + MAX_SEARCH_DATA_SIZE: 10000, // redis处理返回的成功的值 REDIS_HANDLE_SUCCESS: 1, // redis处理返回的失败的值