• 集群环境删除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;
    }

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

  • 相关阅读:
    MySQL ——索引原理与慢查询优化(Day45)
    mysql 练习题(Day44)
    MySQL 多表查询(Day43)
    MySQL 单表查询(Day42)
    MySQL -表完整性约束(Day41)
    回调函数
    进程池
    共享数据, 信号量(了解),事件(了解)
    管道
    python并发编程之多进程
  • 原文地址:https://www.cnblogs.com/xifenglou/p/10676772.html
Copyright © 2020-2023  润新知