Skip to content

Commit

Permalink
commit for redis cluster batch delete key.
Browse files Browse the repository at this point in the history
  • Loading branch information
张驰 committed Nov 5, 2021
1 parent 9a41e5f commit d3b990d
Show file tree
Hide file tree
Showing 7 changed files with 87 additions and 6 deletions.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
#### 2021-11-05 更新
1.由于redis cluster批量删除功能无法使用,在搜索框下增加一个批量删除框功能,适用于redis cluster环境。

#### 2021-10-25 更新
1.修复ssh登录问题,原逻辑中Jsch绑定本地端口后,Redis连接应使用本地IP及端口。
Expand Down
4 changes: 2 additions & 2 deletions derby.log
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
----------------------------------------------------------------
Mon Oct 25 16:12:21 CST 2021:
Booting Derby version The Apache Software Foundation - Apache Derby - 10.13.1.1 - (1765088): instance a816c00e-017c-b681-ee87-000008d43b10
Fri Nov 05 17:06:52 CST 2021:
Booting Derby version The Apache Software Foundation - Apache Derby - 10.13.1.1 - (1765088): instance a816c00e-017c-ef59-cd5c-00000834b498
on database directory C:\Users\DELL\.redis_plus\data with class loader sun.misc.Launcher$AppClassLoader@18b4aac2
Loaded from file:/D:/apache-maven-3.3.9/repository/org/apache/derby/derby/10.13.1.1/derby-10.13.1.1.jar
java.vendor=Oracle Corporation
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,24 @@ public String treeData(String id, int index, int page, String pattern) {
try {
Jedis jedis = getCurrentJedisObject();
if (null != jedis) {
return getOkByJson(RedisUtil.getKeyTree(jedis, index, page, id, pattern));
return getOkByJson(RedisUtil.getKeyTree(jedis, index, page, id, pattern, false));
} else {
return disconnect();
}
} catch (Exception e) {
return exception(e);
}
}

/**
* 数据分页查询并且模糊删除
*/
@SuppressWarnings("unused")
public String treeAndDeleteData(String id, int index, int page, String pattern) {
try {
Jedis jedis = getCurrentJedisObject();
if (null != jedis) {
return getOkByJson(RedisUtil.getKeyTree(jedis, index, page, id, pattern, true));
} else {
return disconnect();
}
Expand Down
8 changes: 7 additions & 1 deletion src/main/java/com/maxbill/tool/RedisUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -435,7 +435,7 @@ public static long getKeysCount(Jedis jedis, int index, String pattern) {
/**
* 按条件获取分页数据
*/
public static List<ZTreeBean> getKeyTree(Jedis jedis, int index, int page, String pid, String pattern) {
public static List<ZTreeBean> getKeyTree(Jedis jedis, int index, int page, String pid, String pattern, boolean isDeleted) {
long startTime = System.currentTimeMillis();
/** CRC16 cluster模式 keys命令和select命令是禁止的*/
if(!RedisUtil.isCluster(jedis)) {
Expand All @@ -445,6 +445,12 @@ public static List<ZTreeBean> getKeyTree(Jedis jedis, int index, int page, Strin
pattern = "*";
}
Set<String> keySet = RedisUtil.getRedisKeys(pattern, jedis);
if(isDeleted && !"*".equals(pattern)) {
Optional.ofNullable(keySet).orElse(Collections.emptySet()).stream().forEach(e -> {
System.out.println("删除key:"+ e);
jedis.del(e);
});
}
long endTime = System.currentTimeMillis();
log.info("getKeyTree查询耗时:" + (endTime - startTime));

Expand Down
11 changes: 10 additions & 1 deletion src/main/resources/page/data-singles.html
Original file line number Diff line number Diff line change
Expand Up @@ -41,12 +41,21 @@
<div class="handle-left-main">
<div class="key-like">
<input id="key-like-input" class="query-like-input" onkeypress="keydownLoadTree()"
type="text" placeholder="请输要检索的key表达式">
type="text" placeholder="请输要检索的key表达式 *通配所有">
<button class="layui-btn layui-btn-sm query-like-button set-color" onclick="loadLikeTree()">
<i class="layui-icon">&#xe615;</i>搜索
</button>
</div>
</div>
<div class="handle-left-main">
<div class="key-like">
<input id="key-like-delete-input" class="query-like-input" onkeypress=""
type="text" placeholder="请输要删除的key表达式 *已禁用">
<button class="layui-btn layui-btn-sm query-like-button set-color" onclick="loadLikeDeleteTree()">
<i class="layui-icon">&#xe615;</i>删除
</button>
</div>
</div>
<div class="handle-left-full">
<div id="db-tree"></div>
</div>
Expand Down
47 changes: 47 additions & 0 deletions src/main/resources/script/data-singles.js
Original file line number Diff line number Diff line change
Expand Up @@ -320,6 +320,25 @@ function loadDbData(node, pattern) {
}
}

//加载数据
function loadAndDeleteDbData(node, pattern) {
layer.load(2);
var json = dataSinglesRouter.treeAndDeleteData(node.id, node.index, node.page, pattern);
var data = JSON.parse(json);
layer.closeAll('loading');
if (data.code === 200) {
var zTree = $.fn.zTree.getZTreeObj('keyTree' + node.index);
zTree.removeChildNodes(node);
zTree.addNodes(node, 0, data.data);
// zTree.expandAll(true);
} else {
layer.alert(data.msgs, {
skin: 'layui-layer-lan',
closeBtn: 0
});
}
}


//获取key信息
function getKeysInfo(order) {
Expand Down Expand Up @@ -400,6 +419,34 @@ function loadLikeTree() {
}
}


//模糊匹配
function loadLikeDeleteTree() {
if (null == currNode0) {
var zTreeObj = $.fn.zTree.getZTreeObj("keyTree0");
currNode0 = zTreeObj.getNodesByFilter(function (node) {
return node.level === 0
}, true);
}
layer.load(2);
var pattern = $("#key-like-delete-input").val();
var json = dataSinglesRouter.likeInit(currNode0.index, pattern);
var data = JSON.parse(json);
layer.closeAll('loading');
if (data.code === 200) {
var ztreeObj = $.fn.zTree.init($("#keyTree" + currNode0.index), zTreeSetting, data.data);
currNode0 = ztreeObj.getNodesByFilter(function (node) {
return node.level === 0
}, true);
loadAndDeleteDbData(currNode0, pattern);
} else {
layer.alert(data.msgs, {
skin: 'layui-layer-lan',
closeBtn: 0
});
}
}

//重命名key
function renameKey() {
if (null == currNode1) {
Expand Down
2 changes: 1 addition & 1 deletion src/main/resources/style/data-singles.css
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
}

.handle-left-full {
top: 120px;
top: 180px;
left: 0px;
float: left;
width: 400px;
Expand Down

0 comments on commit d3b990d

Please sign in to comment.