zoukankan      html  css  js  c++  java
  • 在spring boot上基于maven使用redis——批量匹配并删除 (二)

    一、背景

        在搭建了项目之后,由于需要通过触发动作,并删除redis中多个key。

    二、思路

         在查询了jedis并没有类似的删除方法之后,事情就变得清晰起来。完成上述任务,分为两个步骤,第一,找到要删除的key;第二删除掉他们。

    三、 解决方法

         从找到要删除的key来说,有两种方法,一种是通过jedis的keys方法来获得;另外一种是通过scan方法获得。

         使用keys方法,寻找包含指定参数的key,其中“*”是匹配符,要是想找前缀就在其后加*,要是找后缀就在传入参数后面加*,而要是图省事方便,前后加*即可。

    public Set<String> queryKeys(String key) {
    
    		Jedis jedis = jedisPool.getResource();
    
    		StringBuilder paramKey = new StringBuilder("*").append(key).append("*");
    
    		Set<String> keys = jedis.keys(paramKey.toString());
    		return keys;
    
    	}
    

      

    使用scan方法,寻找包含指定参数的key,其中  第一,需要构建ScanParams(redis.clients.jedis.ScanParams);第二,主要是填充两个参数第一个是match,标明需要匹配的字符串,第二个是count标明要扫描出多少个来,我这里写的是1000,因为目前库中keys远小于1000,相当于全找出来;第三jedis中的部分scan方法是@Deprecated的不建议使用。

       在获得结果集之后,转换出来即可

    public List<String> queryKeys(String key) {
    
    		Jedis jedis = jedisPool.getResource();
    		// 存入键值对
    		ScanParams scanParams = new ScanParams();
    		StringBuilder paramKey = new StringBuilder("*").append(key).append("*");
    		scanParams.match(paramKey.toString());
    		scanParams.count(1000);
    		ScanResult<String> sr = jedis.scan("0", scanParams);
    		List<String> a = sr.getResult();
    		return a;
    
    	}

    因为,大家都知道keys的方法会阻塞单线程的redis 在keys少的时候,无所谓,但是在keys多的时候,这个就会是很大的隐患。我们采用redis 就是为了其查询速度快。所以,决定采取后者scan的方法实现

     1 public void delStrings(String key) {
     2 
     3         try {
     4             Jedis jedis = jedisPool.getResource();
     5             // 存入键值对
     6             ScanParams scanParams = new ScanParams();
     7             StringBuilder paramKey = new StringBuilder("*").append(key).append("*");
     8             scanParams.match(paramKey.toString());
     9             scanParams.count(1000);
    10             ScanResult<String> sr = jedis.scan("0", scanParams);
    11             List<String> a = sr.getResult();
    12             for (String delkey : a) {
    13                 jedis.del(delkey);
    14             }
    15             jedis.close();
    16         } catch (Exception e) {
    17             // TODO: handle exception
    18         }
    19     }

    四 MAVEN的依赖

                   <dependency>
    			<groupId>redis.clients</groupId>
    			<artifactId>jedis</artifactId>
    			<version>2.9.0</version>
    		</dependency>
    

    五、后记

      还是写代码有意思  

      

    ScanParams 
  • 相关阅读:
    【字符串处理算法】字符串包含的算法设计及C代码实现【转】
    linux中字符串转换函数 simple_strtoul【转】
    Linux内核空间内存申请函数kmalloc、kzalloc、vmalloc的区别【转】
    linux非阻塞的socket EAGAIN的错误处理【转】
    嵌入式 uboot引导kernel,kernel引导fs【转】
    jQuery入门(4)jQuery中的Ajax应用
    jQuery入门(3)事件与事件对象
    jQuery入门(2)使用jQuery操作元素的属性与样式
    jQuery入门(1)jQuery中万能的选择器
    JavaScript在IE6下超级链接window.location.href不跳转的bug 及 解决方案
  • 原文地址:https://www.cnblogs.com/iceworld520/p/9838128.html
Copyright © 2011-2022 走看看