redis模糊批量删除key

版权声明:个人 https://blog.csdn.net/csdnmrliu/article/details/83624492

1.shell方式

[root@bigdata shell]# cat 2_batchDelRedisKeysByPattern.sh 
#!/bin/bash


COMMOND_HOME=/usr/local/redis-4.0.10/bin/redis-cli
pattern=$1

echo "batch del keys ${pattern}"

# del stand-alone redis
#redis-cli -h 127.0.0.1 -p 6379 -a liuye0425@+. keys ${pattern} | xargs -i redis-cli -h 127.0.0.1 -p 6379 -a liuye0425@+. del {}


#batch del redis cluster
#1. fetch master nodes hostandport
#172.27.0.13:12301
#172.27.0.13:12302
#172.27.0.13:12303
echo "1. fetch master nodes hostandport"
#${COMMOND_HOME} -c -h 172.17.0.13 -p 12306 cluster nodes|grep master|awk '{print $2}'|awk -F "@" '{print $1}' >redis_cluster_nodes.txt

#2. create HostAndPort array
echo "2. create HostAndPort array"
HostAndPort=()
for line in $(cat redis_cluster_nodes.txt)
do
  HostAndPort=(${HostAndPort[@]} ${line})
done

#3. iter HostAndPort array to del keys by pattern
echo "3. iter HostAndPort array to del keys by pattern"
for node in ${HostAndPort[@]}
  do
    echo "start batch del ${node} keys ${pattern}"
    ip=`echo ${node}|cut -d : -f 1`
    port=`echo ${node}|cut -d : -f 2`
    ${COMMOND_HOME} -c -h ${ip} -p ${port} keys ${pattern}|xargs -i ${COMMOND_HOME} -c -h ${ip} -p ${port} del {}    
  done
echo "completed"

2.Jedis(java)

https://blog.csdn.net/xiao_jun_0820/article/details/77227104

public static void batchDeleteForCluster(String pattern)
  {
    JedisCluster cluster = JedisPoolUtil.getInstance().getCluster();
    Map<String, JedisPool> clusterNodes = cluster.getClusterNodes();
    for (Map.Entry<String, JedisPool> entry : clusterNodes.entrySet())
    {
      jedis = ((JedisPool)entry.getValue()).getResource();
      if (!jedis.info("replication").contains("role:slave"))
      {
        Set<String> keys = jedis.keys(pattern);
        if (keys.size() > 0)
        {
          Map<Integer, List<String>> map = new HashMap(6600);
          for (String key : keys)
          {
            int slot = JedisClusterCRC16.getSlot(key);
            if (map.containsKey(Integer.valueOf(slot)))
            {
              ((List)map.get(Integer.valueOf(slot))).add(key);
            }
            else
            {
              List<String> list = new ArrayList();
              list.add(key);
              map.put(Integer.valueOf(slot), list);
            }
          }
          for (Map.Entry<Integer, List<String>> integerListEntry : map.entrySet()) {
            jedis.del((String[])((List)integerListEntry.getValue()).toArray(new String[((List)integerListEntry.getValue()).size()]));
          }
        }
      }
    }
    Jedis jedis;
    System.out.println("finished!");
  }

非集群方式

  public static void batchDelete(String pattern, int count)
  {
    Jedis jedis = null;
    ScanParams scanParams = new ScanParams();
    
    scanParams.count(Integer.valueOf(count));
    String scanRet = "0";
    try
    {
      jedis = JedisPoolUtil.getInstance().getJedisFromPoll();
      List<String> retList = new ArrayList();
      do
      {
        retList.clear();
        ScanResult ret = jedis.scan(scanRet, scanParams.match(pattern));
        scanRet = ret.getStringCursor();
        retList.addAll(ret.getResult());
        

        Pipeline pipeline = jedis.pipelined();
        pipeline.multi();
        for (String key : retList) {
          pipeline.del(key);
        }
        pipeline.exec();
        pipeline.sync();
      } while (!scanRet.equals("0"));
      if (null != jedis) {
        jedis.close();
      }
    }
    catch (Exception e)
    {
      e.printStackTrace();
      if (null != jedis) {
        jedis.close();
      }
    }
    finally
    {
      if (null != jedis) {
        jedis.close();
      }
    }
    System.out.println("finished!");
  }

猜你喜欢

转载自blog.csdn.net/csdnmrliu/article/details/83624492
今日推荐