集群环境删除redis指定的key

1、说明

redis集群上有时候会需要删除多个key,就必须需要登录到每个节点上,而且有可能这个key不在这个节点,这样删除起来就比较麻烦,下面提供一种便捷方式可以实现

 

2、查看redis集群中的master节点

首先你要确认有哪几台master节点,可以用下面命令查看:

 

#./redis-cli  cluster nodes | grep master

 

image.png

PS:在这里我有3台master主节点,端口都是6379

 

3、编写redis_del.sh脚本

#!/bin/bash

redis_comm=/usr/local/redis/bin/redis-cli

redis_ser01=172.18.18.107

redis_ser02=172.18.18.108

redis_ser03=172.18.18.109

 

$redis_comm -c -h $redis_ser01  keys $1 | xargs -i ./redis-cli -h $redis_ser01 del {}

$redis_comm -c -h $redis_ser02  keys $1 | xargs -i ./redis-cli -h $redis_ser02 del {}

$redis_comm -c -h $redis_ser03  keys $1 | xargs -i ./redis-cli -h $redis_ser03 del {}

 

参数说明:

    -c:启动集群模式进入redis集群服务

    -h:redis主机地址

    xargs -i: -i 选项告诉 xargs 可以使用{}代替传递过来的参数

 

4、使用redis_del.sh脚本

比如,我们现在有个需求,要删除redis集群以UP开头所有的key。

  • 首先,我们先登录redis集群,查看一下:

image.png

 

  • 然后,使用redis_del.sh脚本删除:

# ./redis_del.sh  UP* 

image.png

PS:如上图所示,UP开头的所有key都删除了

 

  • 脚本用法:sh  redis_del.sh  key参数

例如,你要删除其它key值:

./redis_del.sh  a*        #删除以a开头的key值

./redis_del.sh  b*        #删除以b开头的key值

 

或者,删除以什么结尾的keys值:

./redis_del.sh   *ab        #删除以ab结尾的key值

./redis_del.sh   *123        #删除以123结尾的key值

......等等

 

 

################### 接口方式管理redis集群数据 #####################

在controller类增加如下代码:

@Autowired
private StringRedisTemplate redisTemplate;

@GetMapping(value ="/manager/getKeys")
public Response<String> getKeys(){
Response response = new Response();
Set<String> keys = redisTemplate.keys("*");
response.setItems(Arrays.asList(keys));
return response;
}

@GetMapping(value ="/manager/getKey")
public Response<String> getKey(@RequestParam("key")String key){
String value = redisTemplate.opsForValue().get(key);
return Response.success(value);
}

@GetMapping(value ="/manager/setKV")
public Response<String> getKey(HttpServletRequest request){
Map<String,String[]> map = request.getParameterMap();
for(String key:map.keySet()){
String value = map.get(key)[0];
redisTemplate.opsForValue().set(key,value);
}
return Response.success();
}

@GetMapping(value ="/manager/delKey")
public Response<String> delKey(@RequestParam("key")String key){
redisTemplate.delete(key);
return Response.success();
}
@GetMapping(value ="/manager/flush")
public Response<String> flushDb(){
Set<String> keys = redisTemplate.keys("*");
redisTemplate.delete(keys);
return Response.success();
}

@GetMapping(value ="/manager/query")
public Response<String> query(@RequestParam("key")String key){
Response response = new Response();
Set<String> keys = redisTemplate.keys(key);
response.setItems(Arrays.asList(keys));
return response;
}

 

 

好了,觉得有用的朋友可以转发或者收藏,大家有问题可以在下面留言一起探讨,有更好的建议也可以在评论区贴出来!!!

posted @ 2019-04-09 14:44  西凤楼  阅读(8936)  评论(0编辑  收藏  举报
如果,您认为阅读这篇博客让您有些收获, 如果,您希望更容易地发现我的新博客,不妨关注一下。因为,我的写作热情也离不开您的肯定支持。 感谢您的阅读,如果您对我的博客所讲述的内容有兴趣,请继续关注我的后续博客。 因为有小孩,兼职卖书,路过的朋友有需要低价购买图书、点读笔、纸尿裤等资源的,可扫最上方二维码,质量有保证,价格很美丽,欢迎咨询!