Skip to content

Commit

Permalink
cluster 搜索
Browse files Browse the repository at this point in the history
  • Loading branch information
zhoudian committed Dec 21, 2021
1 parent 6446b17 commit dc0bf38
Show file tree
Hide file tree
Showing 3 changed files with 126 additions and 106 deletions.
118 changes: 70 additions & 48 deletions src/pages/HostKey/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand Down Expand Up @@ -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);
}
/**
Expand Down Expand Up @@ -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 });
}
);
}
Expand All @@ -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);
}
);
);
});
}
/**
*改变页码
Expand Down Expand Up @@ -419,9 +439,11 @@ class HostKey extends Component {
ref={this.searchInput}
onSearch={this.searchKey.bind(this)}
enterButton={
<Button icon={<SearchOutlined />}></Button>
<Button
disabled={this.state.searchDisable}
icon={<SearchOutlined />}
></Button>
}
disabled={this.state.searchDisable}
/>
</AutoComplete>
</Tooltip>
Expand Down
110 changes: 54 additions & 56 deletions src/pages/HostKeyTree/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand Down Expand Up @@ -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);
}
/**
Expand Down Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions src/utils/constant.js
Original file line number Diff line number Diff line change
Expand Up @@ -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处理返回的失败的值
Expand Down

0 comments on commit dc0bf38

Please sign in to comment.