集群環境刪除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;
}

 

 

好了,覺得有用的朋友可以轉發或者收藏,大家有問題可以在下面留言一起探討,有更好的建議也可以在評論區貼出來!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM